【问题标题】:different output for FileReader and FileInputStreamFileReader 和 FileInputStream 的不同输出
【发布时间】:2013-05-24 19:07:09
【问题描述】:
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        FileReader fileReader1 = new FileReader("C:\\test\\input.txt");
        FileInputStream fileInputStream1 = new FileInputStream("C:\\test\\input.txt");
        FileReader fileReader2 = new FileReader("C:\\test\\abc.png");
        FileInputStream fileInputStream2 = new FileInputStream("C:\\test\\abc.png");

        int ab=fileReader1.read(); 
        int bc=fileInputStream1.read();

        int ab1=fileReader2.read();
        int bc1=fileInputStream2.read();

        System.out.println("reading a file : fileReader:"+ab+" fileInputStream:"+bc);
        System.out.println("resding  PNG : fileReader:"+ab1+" fileInputStream:"+bc1);
    }
}

输出:

reading a file : fileReader:104 fileInputStream:104
resding  PNG : fileReader:8240 fileInputStream:137

我正在使用 FileReader 和 FileInputStream 来读取 txt 文件和读取图像文件。我知道读取字节明智和其他字符明智。但我没有得到这个输出。

【问题讨论】:

  • PNG 文件可能包含一个文件结束字符(Windows 中的 ctrl-Z,Linux/Unix 中的 ctrl-D),它会导致为文本设计的 FileReader 结束输入完成了。
  • 如果你想读取图像文件你应该使用Image image = ImageIO.read("File instance OR URL");
  • 不,我的目的不是读取图像文件,而只是想清除上面的输出

标签: java filereader fileinputstream


【解决方案1】:

文件阅读器:

读取字符文件的便利类。此类的构造函数假定默认字符编码和默认字节缓冲区大小是适当的。

文件输入流:

FileInputStream 用于读取原始字节流,例如图像数据。要读取字符流,请考虑使用 FileReader。

【讨论】:

  • 我的 txt 输入文件大小是 1KB PNG 输入文件是 274 KB
  • 这与它完全无关。关键是您根本不应该在二进制文件上使用 Reader,或者实际上在您事先不知道是文本的任何文件上使用 Reader。
【解决方案2】:

PNG 文件中的第一个字节是 0x89,即十进制的 137。 FileInputStream 按原样报告字节,而 FileReader 假定它是 Windows 1252 代码页中的字符并将其转换为相应的 UTF-8 字符代码、0x2030 或 8240 十进制。 (假设您在默认代码页 1252 的 Windows 机器上运行代码)。

【讨论】:

    猜你喜欢
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 2013-06-17
    • 2014-10-24
    • 1970-01-01
    相关资源
    最近更新 更多