2012-03-28 15 views
2

私は、そのバッファクラスが何であるか分かりません。彼らはバッファリングのためではありませんか?私はこれが、1つのバッファオブジェクトが同時に読み書きできることを意味するはずです。それにもかかわらず、バッファはpositionの1つしか読み書きすることができません。これは、バッファに相対値put()を書き込んだ場合、相対値であるget()を読み取ることができないことを意味します。また、私がput()get()と交換して呼ぶ場合、私はせん妄を発するでしょう。Java NIO Bufferクラスの主な用途は何ですか?

バッファの使用パターン(サンプル)はありますか?これらのバッファは従来の配列よりもいくらか優れていることは明らかです。

+1

私は同意します。別の読み書きポインターを持たないという点でデザインにひどい欠陥があるようです。彼らが提供していた 'flip()'操作の醜い名前は、ゲームを遠ざけるものでもあります。それが現実の世界の何かに対応していれば、それはより良い名前を持つだろう。その代わりに、それは完全にAPIアーティファクトであり、同様に人為的な名前である。 – EJP

答えて

2

ByteBufferはデータの読み書きに使用されます。多くのプリミティブ型を取得/配置し、エンディアンを制御できます。

パフォーマンスのために使用できます(バイトを一緒に組み立てることなくネイティブにロングまたはダブルにアクセスできるため)。ダイレクトバイトバッファー"Java"メモリに追加コピーなしでデータを読み書きすることができます。メモリマップされたファイルをディスクスペースのサイズに拡張することができ、GC時間に影響を与えずにたくさんのメモリを使用することができます。

+0

2つの 'ByteBuffers'と同じ配列またはメモリ領域を共有することはできますか?これは、読み取り用と書き込み用の両方を使用することを可能にするでしょうか? –

+0

スレッドとプロセス間でデータを渡すのとまったく同じものです。共有メモリである。 –

+1

これを行う最も簡単な方法は、ByteBufferとsplice(0を作成する)です。次に、同じ基底のバッファを使用するByteBuffersが2つあります。 –

関連する問題