使用FileInputStream而不是FileReader时实际发生了什么?

时间:2013-06-20 12:45:19

标签: java inputstream fileinputstream

我已阅读this oracle java教程,它基本上表明您可以使用FileInputStreamFileReader复制txt文件。虽然他们建议使用后一种方法,但我有一个问题。 我想知道使用FileInputStream的第一种方法会发生什么,它基本上读取普通的原始字节。

来自link

  

public class FileInputStream extends InputStream

     

FileInputStream从文件系统中的文件获取输入字节。   可用的文件取决于主机环境。   FileInputStream用于读取原始字节流,例如   图像数据。要读取字符流,请考虑使用   的FileReader。

如果它只是读取原始字节而没有InputFileReader将字节桥接成字符。为什么只使用FileInputStream,它仍然有效?

4 个答案:

答案 0 :(得分:3)

正如您所指出的,FileInputStream(或通常InputStream用于将原始数据读取为字节,而FileReader(或通常为Reader)用于读取字符数据

Reader会将读取的字节转换为字符。 Reader将使用默认平台编码或构造函数中给出的编码进行此转换。

使用FileInputStream复制文本文件是有效的,因为在磁盘上,即使文本文件也只包含字节。

答案 1 :(得分:1)

我不太确定你在问什么,但我认为你要找的是InputStreamReaderlink),它用于将字节流转换为字符。将字节流转换为字符流时需要小心,因为unicode可以(并且经常)每个字符使用多个字节。

答案 2 :(得分:1)

FileInputStream可以是来自任何文件的字节流,例如一个mp3文件:它只是答案“如何将任何文件存入我的Java运行时?”。 FileReader适用于.txt格式等字符文件。当然,您也可以将它与任何文件一起使用,但是当您使用FileReader读取字符时,您可能会遇到编码错误。记住字节是编码的utf8默认字符是ascii。

答案 3 :(得分:-1)

使用FileInputStream时,如果将文件读入String,则字节将自动转换为String。这就是原因。