时间:2021-05-19
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管道用法代码分享的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
io和nio的区别如下: 1、NIO的创建目的是为了让Java程序员可以实现高速I/O而无需编写自定义的本机代码。NIO将最耗时的I/O操作(即填充和提取缓冲
Java7中文件IO发生了很大的变化,专门引入了很多新的类:importjava.nio.file.DirectoryStream;importjava.nio
本文实例讲述了java中enum的用法。分享给大家供大家参考。具体分析如下:1.基本用法复制代码代码如下:enumDay{SUNDAY,MONDAY,TUESD
本文实例讲述了python中管道用法。分享给大家供大家参考。具体如下:#!coding=utf-8importmultiprocessingdefconsume
java8新特性NIO缓冲区(Buffer)的数据存储。ByteBuffer,CharBuffer,ShortBuffer,IntBuffer,LongBuff