1

Javaの文字は2バイトの長さですが、バイトバッファを使用してファイルに文字列を書き込むと、ファイルチャネルの位置が文字数だけ増加します。Filechannel.position() メソッドがファイルの先頭から現在の位置までのバイト数を返すことを読んだので、2 * numberof chars ずつインクリメントする必要はありませんか?

4

2 に答える 2

1

Java の文字の長さは 2 バイトです

JVM の内部。書き出すと、文字セットに応じて 1 ~ 4 バイトの長さになります。

しかし、バイトバッファを使用して文字列をファイルに書き込むと、ファイルチャネルの位置が文字数だけ増加します。

いいえ、バイト数だけ増加します。

Filechannel.position() メソッドがファイルの先頭から現在の位置までのバイト数を返すことを読んだので、2 * numberof chars ずつインクリメントする必要はありませんか?

いいえ、あなたの質問は 2 つの誤りに基づいています。

于 2011-06-01T05:21:45.800 に答える
-1

そうではありません。Java では、char型は型のビット幅の 2 倍ですが、これは char2 バイトの長さにできることbyteを意味するだけです。文字列の文字エンコーディングに依存しますが、UTF-8 エンコーディング (デフォルト) では、文字は 0 から 127 の間の文字では 1 バイトとしてエンコードされますが、この範囲を超える文字では複数のバイトとしてエンコードされます (上位ビットが設定されている場合、次のバイトも現在の文字の一部であることを意味します)

0 ~ 127 文字のみで構成される文字列 (つまり、「通常のテキスト」) の場合、バイト長は char の長さと等しくなります。

文字列に 0 ~ 127 の範囲外の文字が含まれている場合、バイト長は文字数より大きくなります。

于 2011-06-01T03:07:08.217 に答える