java nio中pipe什么时候使用

作者&投稿:可耍 (若有异议请与网页底部的电邮联系)
java nio中pipe什么时候使用~

ava 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值会告诉我们多少字节被读进了缓冲区。

ava 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值会告诉我们多少字节被读进了缓冲区。

ava 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值会告诉我们多少字节被读进了缓冲区。




哈密地区13732439266: java如何实现进程间的通信 -
塞任双嘧: 传统的进程间通信的方式有大致如下几种: (1) 管道(PIPE) (2) 命名管道(FIFO) (3) 信号量(Semphore) (4) 消息队列(MessageQueue) (5) 共享内存(SharedMemory) (6) Socket Java如何支持进程间通信.我们把Java进程理解为...

哈密地区13732439266: java nio使用的是水平触发还是边缘触发 -
塞任双嘧: 水平触发(level-triggered,也被称为条件触发)LT: 只要满足条件,就触发一个事件(只要有数据没有被获取,内核就不断通知你) 边缘触发(edge-triggered)ET: 每当状态变化时,触发一个事件.Java的NIO属于水平触发,即条件触发 这...

哈密地区13732439266: Java中IO与NIO的区别和使用场景 -
塞任双嘧: java.NIO包里包括三个基本的组件 l buffer:因为NIO是基于缓冲的,所以buffer是最底层的必要类,这也是IO和NIO的根本不同,虽然stream等有buffer开头的扩展类,但只是流的包装类,还是从流读到缓冲区,而NIO却是直接读到buffer中进行操作...

哈密地区13732439266: JAVA 中的IO流具体是什么?
塞任双嘧: 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等. 一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文...

哈密地区13732439266: java.net.SocketException: Broken pipe -
塞任双嘧: 先从程序中自查checkoutTimeout.其次java.net.SocketException: Broken pipe 做什么操作报出来的错误.第三将链接数加大.第四是否和数据量有关,ORACLE数据是否需要索引优化...

哈密地区13732439266: Java NIO与IO的区别和比较 -
塞任双嘧: nio是new io的简称,从jdk1.4就被引入了,可以说不是什么新东西了.nio的主要作用就是用来解决速度差异的.举个例子:计算机处理的速度,和用户按键盘的速度.这两者的速度相差悬殊.如果按...

哈密地区13732439266: JAVA NIO 和 AIO 的区别 -
塞任双嘧: Java NIO : 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理.Java AIO(NIO.2) : 异步非阻塞,服务器实现模式为一个有效请求...

哈密地区13732439266: java.sql.SQLException:Io 错误:Broken pipe 什么意思 -
塞任双嘧: 这个异常是由于以下几个原因造成. 1、客户端再发起请求后没有等服务器端相应完,点击了stop按钮,导致服务器端接收到取消请求. 通常情况下是不会有这么无聊的用户,出现这种情况可能是由于用户提交了请求,服务器端相应缓慢,比如业务逻辑有问题等原因,导致页面过了很久也没有刷新出来,用户就有可能取消或重新发起请求. 2、Tomcat服务器在接受用户请求的时候,有其自身的处理能力,线程、服务器等各个资源限制,超出Tomcat承载范围的请求,就会被tomcat停掉,也可能产生该错误. 3、linux的线程机制会产生JVM出错的问题,特别是在连接高峰期间经常出现这样的问题,tomcat在linux下也出现类似情况.

哈密地区13732439266: Java NIO和IO的区别 -
塞任双嘧: NIO是new IO,是IO的升级版. 传统的socket IO中,需要为每个连接创建一个线程,当并发的连接数量非常巨大时,线程所占用的栈内存和CPU线程切换的开销将非常巨大. 使用NIO,不再需要为每个线程创建单独的线程,可以用一个含有限数量线程的线程池,甚至一个线程来为任意数量的连接服务. 由于线程数量小于连接数量,所以每个线程进行IO操作时就不能阻塞,如果阻塞的话,有些连接就得不到处理,NIO提供了这种非阻塞的能力. 参考:csdn博客

哈密地区13732439266: Unix管道机制 -
塞任双嘧: 管道是一种进程间的通信机制,Windows 和 Linux(以及 UNIX)上都使用的这种机制. 管道源自“贝尔实验室”开发的 UNIX ,并且所有的 UNIX 和 Linux 都继承了这项技术. 管道是通过通常的 IO 接口存取的字节流.创建管道后,通过使用操...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网