源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

java的NIO管道用法代码分享

  • 时间:2022-08-22 00:56 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:java的NIO管道用法代码分享
Java的NIO中的管道,就类似于实际中的管道,有两端,一段作为输入,一段作为输出。也就是说,在创建了一个管道后,既可以对管道进行写,也可以对管道进行读,不过这两种操作要分别在两端进行。有点类似于队列的方式。 这里是Pipe原理的图示: [img]http://files.jb51.net/file_images/article/201712/201712690546792.jpg?20171169556[/img] 创建管道 通过Pipe.open()方法打开管道。例如: [code]Pipe pipe = Pipe.open();[/code]  向管道写数据 要向管道写数据,需要访问sink通道。像这样: [code]Pipe.SinkChannel sinkChannel = pipe.sink();[/code] 通过调用SinkChannel的write()方法,将数据写入SinkChannel,像这样:
String newData = "New String to write to file..." + System.currentTimeMillis();
ByteBuffer buf = ByteBuffer.allocate(48);
buf.clear();
buf.put(newData.getBytes());
buf.flip();
while(buf.hasRemaining()) {
 sinkChannel.write(buf);
}
我们在测试例子中给出一个非常简单的管道操作,先向管道写入内容,再从管道读出内容。  
package com.test.nio;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.Pipe;
public class TestPipeA {
 /** 
   * @param args 
   * @throws Exception 
   */
 public static void main(String[] args) throws Exception {
  //创建一个管道 
  Pipe pipe=Pipe.open();
  //创建一个写管道 
  Pipe.SinkChannel sinkChannel=pipe.sink();
  String newData="itbuluoge.com says:"+System.currentTimeMillis();
  ByteBuffer buf=ByteBuffer.allocate(48);
  buf.clear();
  buf.put(newData.getBytes());
  buf.flip();
  /*向管道写入内容*/
  while(buf.hasRemaining()) 
      {
   sinkChannel.write(buf);
  }
  /*创建一个读管道*/
  Pipe.SourceChannel sourceChannel=pipe.source();
  ByteBuffer getBuf=ByteBuffer.allocate(48);
  int bytesRead=sourceChannel.read(getBuf);
  getBuf.flip();
  /*从管道读出内容*/
  while(getBuf.hasRemaining()) 
      {
   System.out.print((char)getBuf.get());
  }
 }
}
输出结果 [img]http://files.jb51.net/file_images/article/201712/201712692139514.png?201711692149[/img] 我们可以看到,已经可以完成我们需要的目标了。注意,我在这个地方编程的时候,出现了一点错误,就是我在读取管道的时候,没有设置getBuf.flip(),导致无法读出数据,这个函数非常重要,在完成buffer读取内容之后,一定要设置一下读标志,恢复指针到原始位置,才能读取到全部内容。 以上就是本文关于java的NIO管道用法代码分享的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部