【Java】I/O流 字节流有无字符编码的说法?
·
在 Java 中,FileInputStream 并不是按照字符编码来处理数据的。它是一个字节流(InputStream),只负责读取文件中的原始字节(byte),不进行任何字符编码的转换。
具体解释如下:
- FileInputStream 是字节流
FileInputStream fis = new FileInputStream("example.txt");
int b = fis.read(); // 读取一个字节
read()返回的是文件中的一个字节(0~255)。- 它不会关心文件内容是文本还是二进制,也不会做编码转换。
- 字节编码在字节流之外处理
如果你希望将文件内容作为文本读取,就需要用 字符流 或者用 字节流 + 编码转换:
FileInputStream fis = new FileInputStream("example.txt");
InputStreamReader isr = new InputStreamReader(fis, "UTF-8"); // 指定编码
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
- 这里的
inputStreamReader才会根据你指定的字符编码(比如 UTF-8、GBK)把字节转换为字符。 - 如果不指定编码,它会使用平台默认编码,这可能会导致中文等字符乱码。
总结:
FileInputStream本身不使用任何字符编码,只读字节。- 字符编码的转换必须通过
InputStreamReader或其它字符流来指定。
更多推荐


所有评论(0)