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

为什么out.write()会改变Java中的int值?,java,io,Java,Io,我试图用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

我试图用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),但改变了其他int值(示例128)?如何将数据直接写入文件?

应使用FileWriter写入字符流。如果您正试图写入二进制数据,则FileOutputStream是合适的。如果将FileWriter替换为FileOutputStream,将BufferedWriter替换为BufferedOutputStream,则会发现数据的写入方式与预期一致


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

改变从128开始的事实应该会给我们提供一些关于发生了什么的线索;127是7位ASCII所能表示的极限。您是否尝试过用DataOutputStream写入二进制数据?