`
youyu4
  • 浏览: 441870 次
社区版块
存档分类
最新评论

java NIO 之 Pipe

 
阅读更多

java NIO 之 Pipe

 

 

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

 

Pipe原理的图示:


         
 

 

 

 

Pipe的特点

 

      Pipe 提供一种机制,可以按照写入的顺序读取数据。 Pipe.SinkChannel用来向管道写入数据,而Pipe.SourceChannel用来从管道读取数据

 

例子:

package cn.outofmemory.nio.channels;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.Pipe;

public class PipeTest {
  public static void main(String[] args) throws IOException {

      //初始化Pipe实例
      Pipe pipe = Pipe.open();

      // 获取写通道
      Pipe.SinkChannel skChannel = pipe.sink();

      String testData = "Test Data to Check java NIO Channels Pipe.";

      ByteBuffer buffer = ByteBuffer.allocate(512);
      buffer.clear();
      buffer.put(testData.getBytes());

      buffer.flip();
       //向写通道写入数据
      while(buffer.hasRemaining()) {
          skChannel.write(buffer);
      }
      //获得读取数据通道
      Pipe.SourceChannel sourceChannel = pipe.source();
      buffer = ByteBuffer.allocate(512);

     //将读取数据写到控制台     
      while(sourceChannel.read(buffer) > 0){

          //flip方法将当前读取位置设置为0, limit设置为写入数据的size
         buffer.flip();

          while(buffer.hasRemaining()){
              char ch = (char) buffer.get();
              System.out.print(ch);
          }

          //clear方法将buffer的limit设置为其容量capacity, 将position设置为0
          buffer.clear();
      }

  }
}

 输出:

Test Data to Check java NIO Channels Pipe.

 

 

 

创建管道

 

Pipe pipe = Pipe.open();

 

 

 

向管道写数据

 

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

 

 

 

 

从管道读取数据

 

Pipe.SourceChannel sourceChannel = pipe.source();

 

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

 

ByteBuffer buf = ByteBuffer.allocate(48);
 
int bytesRead = sourceChannel.read(buf);

 

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

  • 大小: 7.5 KB
分享到:
评论

相关推荐

    JavaNIO chm帮助文档

    Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/...Java NIO系列教程(十一) Pipe Java NIO系列教程(十二) Java NIO与IO

    Java NIO英文高清原版

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java平台中用于替代标准I/O(BIO)模型的一种新机制。NIO在Java 1.4版本引入,提供了更高效的数据处理和通道通信方式,特别适用于高并发、大数据...

    java NIO实例

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java从1.4版本开始引入的一种新的I/O模型,它为Java应用程序提供了更高效的数据传输方式。传统的Java I/O模型(BIO)在处理大量并发连接时效率较...

    Java NIO Socket基本

    4. **管道(Pipe)**:在某些特定情况下,两个线程之间可以使用`java.nio.Pipe`进行单向数据传递。 5. **文件系统API**:NIO还提供了`java.nio.file`包,包含一系列与文件系统交互的类,如Files、Paths等。 Java ...

    一个java NIO的例子

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统I/O模型的新技术。在传统的Java IO模型中,读写操作是阻塞的,即当调用read或write方法时,线程会等待数据准备好或...

    Java.NIO资源下载资源下载

    根据提供的文件信息,我们可以提取并总结出关于Java NIO(New Input/Output)的重要知识点。 ### Java NIO 概述 Java NIO 是 Java 平台的一个重要特性,首次出现在 Java 1.4 版本中。它为 Java 开发者提供了一套...

    java nio示例代码

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java从1.4版本开始引入的一个新特性,旨在提供一种比传统的IO(I/O)模型更高效、性能更好的处理输入和输出的方式。传统的Java IO基于流(Stream)...

    Java NIO Ron Hitchens著

    6. **管道(Pipes)**:在NIO中,Pipe提供了一种单向的数据传输通道,用于在两个线程之间传递数据。 7. **多路复用(Multiplexing)**:通过选择器,NIO可以实现I/O的多路复用,即一个线程可以处理多个连接,显著...

    高手使用Java NIO编写高性能的服务器

    6. **管道(Pipe)**:NIO还支持管道通信,允许两个线程之间直接交换数据,无需经过主内存,提高了数据传输效率。 7. **scatter/gather(分散/聚集)**:NIO允许数据从多个缓冲区分散写入一个通道,或者从一个通道...

    java-nio.rar_NIO_java nio

    - `java.nio.channels.Pipe`:用于创建管道,实现进程间通信。 - `java.nio.channels.AsynchronousSocketChannel` 和 `AsynchronousServerSocketChannel`:提供异步的TCP连接支持。 - `java.nio.file.Paths` 和 `...

    JAVA NIO 异步通信模板服务端

    **JAVA NIO 异步通信模板服务端** Java NIO(New Input/Output)是Java在J2SE 1.4版本中引入的一个新特性,它提供了与标准I/O完全不同的编程模型,尤其是在处理大量并发连接时,NIO展现出了更高的效率。本模板...

    Java NIO原理分析及代码实例

    Java NIO(New IO)是Java 1.4版本引入的一个新API,全称为Non-blocking Input/Output,它提供了一种不同于传统IO的编程模型,传统IO基于块I/O,而NIO则基于通道(Channel)和缓冲区(Buffer)进行数据传输。NIO的...

    javaNIO很好的资料

    缓冲区是 NIO 的核心组件之一,用于存储数据。Java NIO 提供了多种缓冲区,每种缓冲区对应不同的数据类型: - **ByteBuffer**:用于存储 byte 类型的数据。 - **CharBuffer**:用于存储 char 类型的数据。 - **...

    JAVA NIO 学习资料

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java从JDK 1.4版本开始引入的一种新的IO模型,它为Java应用程序提供了更高效的数据传输方式,尤其适用于高并发、大数据量的网络服务。与传统的IO...

    java nio 尚硅谷 12讲 new

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统I/O模型的新技术。尚硅谷的12讲Java NIO课程,旨在深入浅出地讲解这一重要概念,帮助开发者提升程序的性能和效率。...

    Java语言基础教程-Java NIO流篇1

    此外,NIO还包含了文件通道(FileChannel)、管道(Pipe)、字符集(Charset)等概念。文件通道可以从文件直接读写,而管道则可以实现线程间的通信。字符集处理则解决了在不同编码格式之间转换的问题。 总结来说,...

    java NIO socket聊天

    此外,Java NIO还引入了`Pipe`和`FileChannel`等特性,使得进程间通信和文件操作也变得更加灵活。`Pipe`允许两个线程之间通过管道进行单向数据传输,而`FileChannel`提供了直接内存映射到文件的能力,提高了大文件...

    java-instantcode-developing.rar_java nio

    7. **管道(Pipe)**:管道是Java NIO中用于线程间通信的一种机制,它允许两个线程之间通过管道进行单向数据传输。 8. **字符集转换**:Java NIO提供Charset类和CharsetDecoder/CharsetEncoder类,支持多种字符集的...

Global site tag (gtag.js) - Google Analytics