InputStreamReader与FileReader

Spl*_*iff 29 java stream

我似乎无法确定任何区别InputStreamReaderFileReader另外两个被初始化的方式.使用其中一个有什么好处吗?大多数其他文章涵盖FileInputStreamvs InputStreamReader,但我FileReader反而比较.在我看来,他们都有相同的目的.

Mic*_*rdt 50

首先,InputStreamReader可以处理所有输入流,而不仅仅是文件.其他示例是网络连接,类路径资源和ZIP文件.

其次,FileReader不允许您指定编码,而是使用平台默认编码,这使得它几乎无用,因为当在具有不同平台默认编码的系统上运行代码时,使用它将导致数据损坏.

简而言之,忘记FileReader存在.

  • @Spliff:从这个角度来看,API中隐含使用默认编码的所有内容都是个坏主意; 我猜当时API已经设想了,这似乎不是一个问题.我真正无法理解的是为什么他们仍然没有添加一个采用编码的FileReader构造函数. (7认同)
  • 在Java 11中,新的构造函数已添加到FileReader中,它允许您指定Charset`public FileReader(File file,Charset charset)throws IOException` (2认同)

JB *_*zet 7

FileReader从文件系统中的文件中读取字符.InputStreamReader从任何类型的输入流中读取字符.流可以是FileInputStream,但也可以是从套接字,HTTP连接,数据库blob等获得的流.

我通常更喜欢使用包装FileInputStream的InputStreamReader来读取文件,因为它允许指定特定的字符编码.