在 Java 中,FileInputStream 不是按照字符编码来处理数据的。它是一个字节流(InputStream),只负责读取文件中的原始字节(byte),不进行任何字符编码的转换。

具体解释如下:

  1. FileInputStream 是字节流
FileInputStream fis = new FileInputStream("example.txt");
int b = fis.read(); // 读取一个字节
  • read()返回的是文件中的一个字节(0~255)。
  • 它不会关心文件内容是文本还是二进制,也不会做编码转换。
  1. 字节编码在字节流之外处理

如果你希望将文件内容作为文本读取,就需要用 字符流 或者用 字节流 + 编码转换

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或其它字符流来指定。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐