服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|易语言|

服务器之家 - 编程语言 - JAVA教程 - java的NIO管道用法代码分享

java的NIO管道用法代码分享

2021-02-28 10:43IT老蒋 JAVA教程

这篇文章主要介绍了java的NIO管道用法代码分享,具有一定借鉴价值,需要的朋友可以参考下。

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

延伸 · 阅读

精彩推荐
  • JAVA教程轻松掌握java中介者模式

    轻松掌握java中介者模式

    这篇文章主要帮助大家轻松掌握java中介者模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    断了联系1352020-06-19
  • JAVA教程浅谈java泛型的作用及其基本概念

    浅谈java泛型的作用及其基本概念

    下面小编就为大家带来一篇浅谈java泛型的作用及其基本概念。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    java教程网1542020-06-05
  • JAVA教程Java接口中尽量避免使用数组

    Java接口中尽量避免使用数组

    这篇文章主要介绍了Java接口中尽量避免使用数组的建议,根据实际示例展示了接口中使用数组而造成的影响程序速度的现象,需要的朋友可以参考下 ...

    goldensun4272019-12-25
  • JAVA教程聊一聊Java反射

    聊一聊Java反射

    工作中哪些地方比较容易用到反射,这篇文章就为大家介绍了工作中常用到的Java反射,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    李岩飞1442020-07-01
  • JAVA教程Java基于jdbc连接mysql数据库操作示例

    Java基于jdbc连接mysql数据库操作示例

    这篇文章主要介绍了Java基于jdbc连接mysql数据库操作,结合完整实例形式分析了java使用jdbc连接mysql数据库的具体步骤与相关注意事项,需要的朋友可以参考下...

    lifan54662020-12-07
  • JAVA教程彻底理解Java中的ThreadLocal

    彻底理解Java中的ThreadLocal

     ThreadLocal翻译成中文比较准确的叫法应该是:线程局部变量。使用这个工具类可以很简洁地编写出优美的多线程程序。 接下来通过本文给大家介绍Java中的...

    枫之逆2982020-08-26
  • JAVA教程Java编程实现从尾到头打印链表代码实例

    Java编程实现从尾到头打印链表代码实例

    这篇文章主要介绍了Java编程实现从尾到头打印链表代码实例,小编觉得挺不错的,这里分享给大家,供需要的朋友参考。...

    lilivian3802021-01-19
  • JAVA教程浅谈SpringMVC+Spring3+Hibernate4开发环境搭建

    浅谈SpringMVC+Spring3+Hibernate4开发环境搭建

    MVC已经是现代Web开发中的一个很重要的部分,本文介绍一下SpringMVC+Spring3+Hibernate4的开发环境搭建,有兴趣的可以了解一下。...

    shan9liang4162020-07-21