Java Nioのパイプラインは実際のパイプラインに似ており、2つの端があり、1つのセクションは入力として、もう1つのセクションは出力として類似しています。つまり、パイプラインを作成した後、パイプラインを書くか、パイプラインを読むことができますが、これら2つの操作は両端で実行する必要があります。ちょっとしたキューに似ています。
パイプの原理の図は次のとおりです。
パイプラインを作成します
pipe.open()メソッドを介してパイプラインを開きます。例えば:
Pipe pipe = Pipe.open();
パイプラインにデータを書き込みます
パイプラインにデータを書き込むには、シンクチャネルにアクセスする必要があります。このような:
Pipe.SinkChannel sinkChannel = pipe.sink();
このように、sinkchannelの書き込み方法()を呼び出すことにより、SinkChannelにデータを書き込む:
string newData = "ファイル..." + system.currenttimemillis(); bytebuffer buf = bytebuffer.allocate(48); buf.clear(); buf.put(newdata.getBytes()); buf.flip(); while(buf.hasremaining()){sinkchannel.write(buf);}テストの例では、非常にシンプルなパイプライン操作を提供し、最初にパイプラインにコンテンツを書き込み、次にパイプラインからコンテンツを読み取ります。
パッケージcom.test.nio; import java.io.ioexception; Import java.nio.bytebuffer; Import java.nio.channels.pipe; public class testpipea {/** * @param args * @throws例外 */public static void main(string [] args)スロー{// pipe.sinkchannel sinkchannel = pipe.sink(); string newdata = "itbuluoge.comは次のように述べていますpipeline*/while(buf.hasremaining()){sinkchannel.write(buf);}/*read pipeline*/pipe.sourcechannel sourcechannel = pipe.source(); bytebuffer getbuf = bytebuffer.allocate(48); int bytesRead = sourceChannel.read(getBuf); getBuf.flip();/*pipeline*/whileからコンテンツを読み取ります(getbuf.hasremaining()){system.out.print((char)getbuf.get();}}}}}出力結果
必要な目標を達成できることがわかります。この場所でプログラミングをしていたとき、エラーが発生しました。つまり、パイプラインを読んでいたとき、getBuf.flip()を設定しなかったため、データを読み取ることができませんでした。この機能は非常に重要です。バッファ読み取りコンテンツを完了したら、すべてのコンテンツを読み取る前に、読み取りフラグを設定し、元の位置にポインターを復元する必要があります。
上記は、Java Nio Pipelinesの使用法に関するこの記事で共有されているすべてのコンテンツであり、すべての人に役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!