java的NIO管道用法代码分享

2025-05-29 0 41

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

这里是pipe原理的图示:

java的NIO管道用法代码分享

创建管道

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

pipe pipe = pipe.open();

管道写数据

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

pipe.sinkchannel sinkchannel = pipe.sink();

通过调用sinkchannel的write()方法,将数据写入sinkchannel,像这样:

?

1

2

3

4

5

6

7

8
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);

}

我们在测试例子中给出一个非常简单的管道操作,先向管道写入内容,再从管道读出内容。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36
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());

}

}

}

输出结果

java的NIO管道用法代码分享

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

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

原文链接:http://blog.csdn.net/itbuluoge/article/details/39552769

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 java的NIO管道用法代码分享 https://www.kuaiidc.com/113801.html

相关文章

发表评论
暂无评论