4.3 Java Pipe管道详解

4.3 Pipe

       Java 管道Pipe是用于线程间通信的,但是需要注意的是,Java中的Pipe是用于一个虚拟机中的线程之间通信的,不能用于进程之间通信。 Java管道和Unix/Linux中的管道Pipe的作用是不同的,Unix/Linux中的管道是用于进程之间通讯,是不同Process之间。而Java是同一个虚拟机里的线程之间通讯,属于同一个Program。

       Java中Pipe分为了两个类型,字符流和字节流。二者又分为输入流和输出流,输出流是发送消息,输入流是接收消息。


字节流输出 字节输入 字符输出 字符输入
PipedOutputStream PipedInputStream PipedWriter PipedReader



4.3.1 Java 字节流Pipe管道用法

       创建输出流管道。

final PipedOutputStream output = new PipedOutputStream();

       创建输入流管道,构造参数为输出流实列。

final PipedOutputStream output = new PipedOutputStream();
final PipedInputStream  input  = new PipedInputStream(output);

Thread thread1 = new Thread(()-> {
     
        try {
     
            output.write("Hello world, pipe!".getBytes());
            System.err.println(Thread.currentThread().getName()+"已输出!");
        } catch (IOException ignored) {
     
        }
});


Thread thread2 = new Thread(()-> {
     
        try {
     
            int data = input.read();
            System.err.println(Thread.currentThread().getName());
            while(data != -1){
     
                System.out.print((char) data);
                data = input.read();
            }
        } catch (IOException e) {
     
        }
});

thread1.start();
thread2.start();



4.3.2 Java 字符流Pipe管道用法

       创建字符流输出流管道。

PipedWriter pipedWriter = new PipedWriter();

       创建字符流输入流管道。

PipedReader pipedReader = new PipedReader(pipedWriter);

       完整实例。

PipedWriter pipedWriter = new PipedWriter();
PipedReader pipedReader = new PipedReader(pipedWriter);

new Thread(()->{
     
    try {
     
        pipedWriter.write("pipedWriter write msg!");
    } catch (IOException e) {
     
        e.printStackTrace();
    }
}).start();


new Thread(()->{
     
    char[] str = new char[1024];
    try {
     
        pipedReader.read(str);
        System.err.println(new String(str));
    } catch (IOException e) {
     
        e.printStackTrace();
    }
}).start();

4.3.3 Pipe总结

  1. Java中管道作用于一个Jvm,操作系统管道作用于进程之间。
  2. 管道输出流是发送消息,输入流是接收消息。

你可能感兴趣的:(#,4,IO篇,java,Java管道,Java,Pipe,Java管道详解,PipedWriter详解)