バイトを直接ByteBufferに読み込み、元のバッファをbyte []配列に再ラップすることなくそれらをデコードして、メモリ割り当てを最小限に抑えたいと思います。
ByteBuffer.asCharBuffer()
実際には両方のラッパーが同じ基本バッファーを共有しているため、実際には必要です。
この方法のjavadocは言う:
新しいバッファの位置はゼロになり、それはありませんが、その能力とその限界は、2つの
で割っこのバッファ内に残っているバイトの数となり明示的に言えば、CharBuffer
は、指定されたバッファに対してUTF-16文字エンコーディングを使用するというヒントです。 charbufferが使用しているエンコーディングを制御することはできないので、エンコーディングに文字バイトを書く必要はありません。
byteBuffer.put("Hello Dávid".getBytes(StandardCharsets.UTF_16));
あなたの印刷についての1つのことfor
ループ。 CharBuffer.length()
は、実際にはバッファの位置と限界の間にある残りの文字の数なので、CharBuffer.get()
を呼び出すと減少します。したがって、get(int)
を使用するか、for
の終了条件をlimit()
に変更する必要があります。
「ByteBuffer」ではなく、「CharBuffer」を反転する必要があります。「CharBuffer」は反転された状態を継承しません。 – EJP