资讯专栏INFORMATION COLUMN

Java NIO Pipe

spacewander / 3097人阅读

摘要:管道是个线程之间的单向数据连接。数据会被写到通道,从通道读取。这里是原理的图示创建管道通过方法打开管道。

Java NIO 管道是2个线程之间的单向数据连接。Pipe有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。

这里是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);
}

从管道读取数据
从读取管道的数据,需要访问source通道,像这样:

Pipe.SourceChannel sourceChannel = pipe.source();

调用source通道的read()方法来读取数据,像这样:

ByteBuffer buf = ByteBuffer.allocate(48);

int bytesRead = sourceChannel.read(buf);

read()方法返回的int值会告诉我们多少字节被读进了缓冲区。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71732.html

相关文章

  • 【J2SE】java NIO 基础学习

    摘要:标记,表示记录当前的位置。直接缓冲通过方法分配的缓冲区,此缓冲区建立在物理内存中。直接在两个空间中开辟内存空间,创建映射文件,去除了在内核地址空间和用户地址空间中的操作,使得直接通过物理内存传输数据。 NIO与IO的区别 IO NIO 阻塞式 非阻塞式、选择器selectors 面向流:单向流动,直接将数据从一方流向另一方 面向缓存:将数据放到缓存区中进行存取,经通道进行...

    yexiaobai 评论0 收藏0
  • Java线程间通信与信号量

    摘要:一般用于控制并发线程数,及线程间互斥。单个信号量的对象可以实现互斥锁的功能,并且可以是由一个线程获得了锁,再由另一个线程释放锁,这可应用于死锁恢复的一些场合。 1. 信号量Semaphore 先说说Semaphore,Semaphore可以控制某个资源可被同时访问的个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。一般用于控制并发线程数...

    曹金海 评论0 收藏0
  • 高级Java程序员必备:《IDEA问题库》常见问题及解决方案,提升开发效率4(JAVA 小虚竹)

    ❤️作者简介:大家好,我是小虚竹。Java领域优质创作者?,CSDN博客专家认证?,华为云享专家认证? ❤️技术活,该赏 ❤️点赞 ? 收藏 ⭐再看,养成习惯 Intellij IDEA使用教程相关系列 目录 问题:报错unable to establish loopback connection 问题 Caused by: java.io.IOException: Unable to es...

    Tecode 评论0 收藏0
  • 压缩20M文件从30秒到1秒的优化过程

    摘要:压缩文件从秒到秒的优化过程有一个需求需要将前端传过来的张照片,然后后端进行处理以后压缩成一个压缩包通过网络流传输出去。源码如下使用映射文件开始时间内存中的映射文件打印如下可以看到速度和使用的速度差不多的。 压缩20M文件从30秒到1秒的优化过程 有一个需求需要将前端传过来的10张照片,然后后端进行处理以后压缩成一个压缩包通过网络流传输出去。之前没有接触过用Java压缩文件的,所以就直接...

    niuxiaowei111 评论0 收藏0
  • Java NIO 系列教程

    摘要:异步可以让你异步的使用,例如当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。因此,单个的线程可以监听多个数据通道。下面是系列文章的目录概述通道之间的数据传输与原文译者郭蕾校对方腾飞 Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的...

    fanux 评论0 收藏0

发表评论

0条评论

spacewander

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<