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