当前位置: 移动技术网 > IT编程>开发语言>Java > java的NIO管道用法代码分享

java的NIO管道用法代码分享

2019年07月19日  | 移动技术网IT编程  | 我要评论

081413-406,公安海警,可卡好养吗

java的nio中的管道,就类似于实际中的管道,有两端,一段作为输入,一段作为输出。也就是说,在创建了一个管道后,既可以对管道进行写,也可以对管道进行读,不过这两种操作要分别在两端进行。有点类似于队列的方式。

这里是pipe原理的图示:

创建管道

通过pipe.open()方法打开管道。例如:

pipe pipe = pipe.open();

 向管道写数据

要向管道写数据,需要访问sink通道。像这样:

pipe.sinkchannel sinkchannel = pipe.sink();

通过调用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());
		}
	}
}

输出结果

我们可以看到,已经可以完成我们需要的目标了。注意,我在这个地方编程的时候,出现了一点错误,就是我在读取管道的时候,没有设置getbuf.flip(),导致无法读出数据,这个函数非常重要,在完成buffer读取内容之后,一定要设置一下读标志,恢复指针到原始位置,才能读取到全部内容。

以上就是本文关于java的nio管道用法代码分享的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网