2012-02-22 21 views
1

我想输出一些数据在Java中的文件,不明白为什么当我运行此代码...为什么out.write()在Java中改变int值?

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)?我怎样才能将数据直接写入文件?

+1

变化从128开始的事实应该给出一些线索,看看发生了什么; 127是用7位ASCII代表的内容的限制。 – Roadmaster 2012-02-22 15:59:33

+0

您是否尝试过使用DataOutputStream编写二进制数据? – JProgrammer 2012-02-22 16:02:33

回答

3

FileWriter应该用来写字符流。如果你想写二进制数据,那么FileOutputStream是合适的。如果你用FileOutputStream和你的BufferedWriter用BufferedOutputStream替换你的FileWriter,你会发现数据是按照你的预期写的。

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

+0

啊是的,这个工程。谢谢! – 2012-02-22 16:20:36

相关问题