2012-02-22 9 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

+0

バイナリデータを書き込むためにDataOutputStreamを試しましたか? – JProgrammer

答えて

3

文字ストリームを書き込むには、FileWriterを使用する必要があります。バイナリデータを書き込もうとしている場合は、FileOutputStreamが適切です。 FileWriterをFileOutputStreamで置き換え、BufferedWriterをBufferedOutputStreamで置き換えると、期待どおりのデータが書き込まれます。

FileWriterは文字とエンコードを認識します。つまり、文字のエンコードに一致するように渡すデータを変換する可能性があります。しかし正直言って私はここで何が起こっているのか正確には分かりません。

+0

ああ、これは動作します。ありがとう! –