我已阅读this oracle java教程,它基本上表明您可以使用FileInputStream
或FileReader
复制txt文件。虽然他们建议使用后一种方法,但我有一个问题。
我想知道使用FileInputStream的第一种方法会发生什么,它基本上读取普通的原始字节。
来自link:
public class FileInputStream extends InputStream
FileInputStream从文件系统中的文件获取输入字节。 可用的文件取决于主机环境。 FileInputStream用于读取原始字节流,例如 图像数据。要读取字符流,请考虑使用 的FileReader。
如果它只是读取原始字节而没有InputFileReader
将字节桥接成字符。为什么只使用FileInputStream
,它仍然有效?
答案 0 :(得分:3)
正如您所指出的,FileInputStream
(或通常InputStream
用于将原始数据读取为字节,而FileReader
(或通常为Reader
)用于读取字符数据
Reader
会将读取的字节转换为字符。 Reader
将使用默认平台编码或构造函数中给出的编码进行此转换。
使用FileInputStream
复制文本文件是有效的,因为在磁盘上,即使文本文件也只包含字节。
答案 1 :(得分:1)
我不太确定你在问什么,但我认为你要找的是InputStreamReader
(link),它用于将字节流转换为字符。将字节流转换为字符流时需要小心,因为unicode可以(并且经常)每个字符使用多个字节。
答案 2 :(得分:1)
FileInputStream可以是来自任何文件的字节流,例如一个mp3文件:它只是答案“如何将任何文件存入我的Java运行时?”。 FileReader适用于.txt格式等字符文件。当然,您也可以将它与任何文件一起使用,但是当您使用FileReader读取字符时,您可能会遇到编码错误。记住字节是编码的utf8默认字符是ascii。
答案 3 :(得分:-1)
使用FileInputStream时,如果将文件读入String,则字节将自动转换为String。这就是原因。