java管道流 PipedInputStream & PipedOutputStream 的应用
前言 PipedInputStream 和 PipedOutputStream 设计用来解决跨线程的字节数据传输。它们总是成对出现的,而在使用上,也只能 工作在两个不同的线程上,在一个线程里使用管道输入和输出流可能会造成死锁。网上有很多介绍这两个存在于 io 包下的 api。却几乎 找不到一个写 PipedInputStream 的使用场景的,所以本文结合实际业务,来聊一聊 PipedInputStream 的应用。 原理简介 我们知道,输出流写数据,输入流读数据,PipedInputStream 和 PipedOutputStream 也一样,在 PipedOutputStream 的内部有一个 PipedInputStream 类型的 sink属性,用来接收 PipedOutputStream 写入的字节数据。而在 PipedInputStream 内部,定义了一个默认为 1024 大小的字节数组 buffer,作为数据传输的缓冲区。这样一来,就变成了 PipedOutputStream 往 buffer 里写数据,当写满了 buffer 时,便使用 notifyAll() 唤醒读...