为什么out.write()会改变Java中的int值



我试图用Java将一些数据输出到文件中,但不明白为什么当我运行此代码时。。。

try {
    File file = new File("demo.txt");
    BufferedWriter out = new BufferedWriter(new FileWriter(file));
    int i = 127;
    int j = 128;
    System.out.println(Integer.toHexString(i));
    System.out.println(Integer.toHexString(j));
    out.write(i);
    out.write(j);
    out.close();
} catch (IOException e) {}   

以下内容输出到控制台日志:

7f
80

但是当我用十六进制编辑器打开文件demo.txt时,我会看到字节7f和3f。为什么out.write()正确地输出了大多数int值(示例127),却改变了其他值(示例128)?如何将数据直接写入文件?

FileWriter应该用于编写字符流。如果您正在尝试写入二进制数据,那么FileOutputStream是合适的。如果您用FileOutputStream替换FileWriter,用BufferedOutputStream替代BufferedWriter,您会发现数据是按预期写入的。

FileWriter具有字符和编码意识,这意味着它可以转换您通过它传递的数据以匹配字符编码。但老实说,我不知道这里到底发生了什么变化。

最新更新