相互作用のためのバッファ・チャネル用のJava NIOとNIO。ご存知のように、データはチャンネルからバッファに読み込まれ、チャネルにバッファから書かれています。
バッファは、データがメモリから読み取ることができる、本質的にデータを書き込むことが可能です。このメモリは、NIOバッファオブジェクトをパッケージ化し、メモリブロックへの便利なアクセスのためのメソッドのセットを提供しています。
バッファーの手順を使用してデータを読み書き:
バッファのデータが書き込まれている ためフリップ()メソッドを呼び出して 、バッファからデータを読み出す 呼び出しclear()メソッドまたはコンパクト()メソッド
フリップ()メソッドバッファモードを読み取るために書き込みモードから切り替わります。それは読み取ることができる前に、読み取りモードでは、すべてのデータがバッファに書き込まれます。
clear()メソッドは、全体のバッファをクリアします。
コンパクト()メソッドは、データのみがクリアされた読みます。未読データがバッファの先頭に移動され、新しいデータがデータバッファに未読に書き戻されます。
良い例:
RandomAccessFile aFileの位置= 新規のRandomAccessFile( "データ/ NIO-data.txtを"、 "RW" )。 FileChannel inChannel = aFile.getChannel()。 // 48バイトの容量を有するバッファを作成する のByteBuffer BUF = ByteBuffer.allocate(48 )。 INT bytesRead = inChannel.read(BUF)。// バッファに読み込ま。 一方、(!bytesRead = -1 ){ buf.flip()。 //は、読み出しのための準備バッファ作る ながら(buf.hasRemaining()){ System.out.print((CHAR)buf.get())。//は、一度に1つのバイトを読み取る } )(buf.clear。//書き込み用のバッファが準備を bytesRead = inChannel.read(BUF)を、 } aFile.close()。
3つの属性のバッファ:
容量の
容量値は固定サイズであり、容量は、バッファが一杯になると、それは(読み出しデータを介して、またはデータをクリア)、書き込みデータ内のデータの書き込みを継続するために空にされる必要がある、バイト、長い、チャーおよび他のタイプの内側に書き込むことができます。 位置
バッファにデータを書き込む際、位置は現在の位置を表しています。バイトは、長い、等バッファデータが書き込まれて0に初期位置値の後に、データ挿入ユニットのバッファとすることができる次の位置まで前方に移動します。最大容量の位置- 1 ..
データを読み出す際に、特定の場所から読み出されます。読み出しモードをバッファに書き込みモードから切り替えるときの位置データがバッファ、次読み取り可能な位置まで前進する位置から読み出されると、位置は0にリセットされます。
リミット
書き込みモードでは、バッファを使用すると、バッファ内のほとんどに書き込むことができますどのくらいのデータの上限を表します。書き込みモードでは、容量バッファに等しく制限します。
読み出しモードをバッファに切り替えるときに、あなたが読むためにアップ指示どのくらいのデータを制限します。読取モードバッファに切り替えるときしたがって、限界位置が書き込みモードの値に設定されています。あなたが読むことができる前に、言い換えれば、全てのデータが書き込まれる(制限はデータの量に設定されて書き込まれている、この値は書き込みモード位置にあります)
三つの関係:
バッファ・タイプ(文字、ショート、整数、長いフロート操作型又はダブルバイトバッファ。)
ByteBuffer れるMappedByteBuffer CharBufferの のDoubleBuffer FloatBuffer IntBuffer LongBuffer ShortBuffer
各クラスは、バッファがメソッドを割り当てています。バッファは、リソースを割り当てるために使用されます。