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

标签 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(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 是合适的。如果您将 FileWriter 替换为 FileOutputStream 并将 BufferedWriter 替换为 BufferedOutputStream,您会发现数据按照您的预期写入。

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

关于java - 为什么 out.write() 会改变 Java 中的 int 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9398219/

相关文章:

java - Cachedrowset、JDBC和SQL Server 2008插入图像问题

java - 如何使用PropertyUtils获取arraylist的属性

java - 什么时候使用扩展,什么时候使用接口(interface)?

java - 从HBase读取数据

java - XSLT:应用模板时不包含多个子元素

C++将文件读入结构

java - 如何将 `throws IOException` 放入语句中

html - For 循环正在添加一个选项卡本身

java - 从二进制文件中读取任意数量的对象

scala - 使用 sc.textfile 时读取文本文件的是驱动程序还是 worker ?