1

私はJava文字列とそれのバイト表現について疑問に思っています。UTF-16リトルエンディアンでエンコードされたファイルがあります。16進エディターで表示すると、次のように表示されます。

ff fe 61 00 f3 00 61 00 00

今、私がそれを使用してJavaにロードするとき

 BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName),"UTF-16"));
    StringBuilder builder = new StringBuilder();
    String line;

    while ((line = reader.readLine()) != null)
        builder.append(line);
    System.out.println(Arrays.toString(builder.toString().getBytes()));

私は出力で見ることができます

[97, -13, 97]

バイトを印刷している場合、16進エディタで表示できるゼロのバイトが表示されないのはなぜですか?

4

1 に答える 1

3

これは、JavaがUTF-16形式の文字列をメモリに保持しないため、無駄になります。また、getBytesがデフォルトのシステム文字セット(マシンではUTF-16ではない可能性があります)javadocで文字列を返すためです。適切なオーバーロードはgetBytes( "UTF-16")です。このようにすると、最後に0のパディングが表示され、最初にBOM(ff fe)が表示されるはずです。

于 2012-10-05T08:30:33.467 に答える