Java 当使用FileInputStream而不是FileReader时,实际会发生什么?

Java 当使用FileInputStream而不是FileReader时,实际会发生什么?,java,inputstream,fileinputstream,Java,Inputstream,Fileinputstream,我已经阅读了oracle java教程,它基本上显示了您可以通过使用FileInputStream或FileReader复制txt文件。虽然他们建议使用后一种方法,但我有一个问题。 我想知道第一种方法使用FileInputStream时会发生什么,FileInputStream基本上读取纯原始字节 由此: 公共类文件InputStream扩展了InputStream FileInputStream从文件系统中的文件获取输入字节。 哪些文件可用取决于主机环境。 FileInputStream用于读

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

由此:

公共类文件InputStream扩展了InputStream

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


如果它只读取原始字节,并且没有将字节连接到字符的
InputFileReader
。为什么只使用
FileInputStream
,它仍然有效?

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

读取器
将为您将读取的字节转换为字符。
读取器
将使用默认平台编码或构造函数中为此转换提供的编码


FileInputStream
复制文本文件是可行的,因为在磁盘上,即使是文本文件也只由字节组成。

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

FileInputStream可以是来自任何文件(例如mp3文件)的字节流:这就是问题的答案“如何将任何文件放入java运行时?”。
文件读取器是用于字符文件(如.txt格式)的首选。当然,您也可以将其用于任何文件,但使用文件读取器读取字符时,可能会出现编码错误。请记住,字节是按utf8编码的。默认字符是ascii。

经验法则:如果您没有对于文本的特定需求,请使用该选项。“当然,您也可以将其用于任何文件”确定,因此基本上字节会转换为整数,然后从FileOutputStream中再次读取它们。当写入
FileOutputStream
时,您可以直接写入字节(无需转换)到磁盘。@Rollerball问题在于,根据编码的不同,并非每个字符都能放入一个字节(例如UTF-8编码)。在保留ASCII字符之前,您不会看到FileInputStream的问题。不过,对于复制,这并不重要-复制所有字节才是重要的。