目录:系统学习 Java IO---- 目录,概览

PipedInputStream 类使得可以作为字节流读取管道的内容。 管道是同一 JVM 内的线程之间的通信通道。

使用两个已连接的管道流时,要为每个流操作创建一个线程,

read() 和 write() 都是阻塞方法,如果一个线程同时读写就会造成死锁

看一个例子:

public class Pipe {
public static void main(String[] args) throws IOException {
final PipedOutputStream output = new PipedOutputStream();
final PipedInputStream input = new PipedInputStream(output); // 写线程,创建匿名 Runnable 对象
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
try {
output.write("Hello Pipe".getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
});
// 读线程,用一下 Lambda 表达式创建匿名 Runnable 对象
Thread thread2 = new Thread(() -> {
try {
int data = input.read();
while (data != -1) {
System.out.print((char) data);
data = input.read();
}
System.out.println();
} catch (IOException e) {
e.printStackTrace();
}
}
);
thread1.start();
thread2.start();
}
}

这里通过利用构造方法来直接指定管道输入流的管道输出流。

PipedInputStream input = new PipedInputStream(output);

也可以使用 pipe1.connect(pipe2) 来连接两个管道流,例如:

PipedInputStream pis = new PipedInputStream(); pis.connect(pos);

除了管道之外,还有许多其他方法可以在同一个 JVM 中进行通信。

事实上,线程更经常交换完整的对象而不是原始的字节数据。

但是如果需要在线程之间交换原始字节数据,Java IO 的管道是能做到的。

最新文章

  1. ASP.NET MVC项目实践技巧
  2. Loadrunner,将http请求返回的中文结果打印出来
  3. 意译:《JVM Internals》
  4. Windows、Linux下文件操作(写、删除)错误的产生原因、及解决方法
  5. C语言(4)
  6. php函数、php定义数组和数组遍历
  7. 3D语音天气球(源码分享)——创建可旋转的3D球
  8. Bochs使用说明
  9. hdu4081 次小生成树变形
  10. win7 cmd命令行窗口 宽度无法变大 自由调整大小
  11. sql plus 抢救数据(測)
  12. python 三层架构说明
  13. Canvas: 优雅的代码作图系列:中国国旗
  14. Zabbix配置邮件监控
  15. Spring容器技术内幕之BeanWrapper类介绍
  16. async_retrying
  17. vue 异步请求
  18. 如何测试你给客户端app开的接口
  19. WordPress基础:wp_list_pages显示页面信息列表
  20. centos下软件安装

热门文章

  1. 在动态THML语句中调用JS函数传递带空格参数的问题
  2. 图像处理与计算机视觉的 topics
  3. HDU 4861(多校)1001 Couple doubi
  4. 运行时动态伪造vsprintf的va_list
  5. jquery 隐私迭代
  6. mysql 优化 读写分离 主从复制
  7. WPF 使用依赖属性(DependencyProperty) 定义用户控件中的Image Source属性
  8. Windows软件在Linux上的等价/替代/模仿软件列表 (抄一个)
  9. CentOS7下Docker安装
  10. wpf自定义带刻度的柱状图控件