4.3 Java Pipe管道详解

4.3 Pipe

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

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


字节流输出字节输入字符输出字符输入
PipedOutputStreamPipedInputStreamPipedWriterPipedReader



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. 管道输出流是发送消息,输入流是接收消息。
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兴趣使然的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值