JAVA IO-管道流
来源:互联网 发布:软考初级程序员视频 编辑:程序博客网 时间:2024/05/16 18:53
JAVA IO-管道流
管道
- 现实中的管道可以理解为用管子、管子联接件和阀门等联接成的用于输送气体、液体或带固体颗粒的流体的装置百度百科-管道;JAVA中我们可以把Pipes理解成连接数据源和目标的媒介。
- JAVA IO中通过Pipes(管道)来在同一个JVM中的不同两个线程之间进行通信;JAVA IO中的Pipes不同于Unix/Linux下的Pipes,Unix/Linux下的Pipes是在不同地址下的两个进程之间可以通过Pipes进行通信;JAVA IO中的Pipes只能在同一个JVM下的两个不同线程之间进行通信。
管道流
JAVA IO中通过PipedOutputStream/PipedInputStream来创建管道;一个线程通过PipedOutputStream写入数据,另一个线程通过PipedInputStream来读取数据;PipedOutputStream/PipedInputStream可以通过connect()来进行关联。
死锁问题
两个关联的管道流,务必分配到不同的线程中去;因为PipedOutputStream的write()和PipedInputStream的read()方法会导致流的阻塞,一个线程中同时读写就会导致死锁问题。
JAVA IO管道流例子
public class PipedStream { public static void main(String[] args) { PipedReceiver pipedReceiver = new PipedReceiver(); PipedSender pipedSender = new PipedSender(); try { pipedSender.getPipedOutputStream().connect( pipedReceiver.getPipedInputStream()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } pipedSender.sendMsg("hello world!sky".getBytes()); pipedReceiver.start(); } /** * PipedInputStream read * @author Administrator * */ static class PipedReceiver extends Thread { private PipedInputStream pipedInputStream; private byte[] buffer = new byte[1024]; public PipedReceiver() { pipedInputStream = new PipedInputStream(); } public PipedInputStream getPipedInputStream() { return pipedInputStream; } @Override public void run() { if (pipedInputStream != null) { try { int count = pipedInputStream.read(buffer, 0, buffer.length); if (count > 0) { System.out.println("Count:" + count + "\r\n" + "Content:" + new String(buffer, 0, count)); } pipedInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * PipedOutputStream write * @author Administrator * */ static class PipedSender extends Thread { private PipedOutputStream pipedOutputStream; private byte[] msg; public PipedSender() { pipedOutputStream = new PipedOutputStream(); } public PipedOutputStream getPipedOutputStream() { return pipedOutputStream; } public void sendMsg(byte[] msg) { if (msg == null) return; this.msg = msg; start(); } @Override public void run() { if (pipedOutputStream != null && msg != null) { try { pipedOutputStream.write(msg, 0, msg.length); pipedOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } }}
0 0
- JAVA IO-管道流
- Java IO 管道流
- Java IO _管道流
- java IO之管道流
- JAVA IO流(管道流)
- java笔记-IO流-管道流
- 【java编程】IO流之管道流
- Java IO 7:管道流、对象流
- JAVA IO之管道流总结大全
- JAVA IO之管道流总结大全
- JAVA IO之管道流总结
- JAVA IO之管道流总结大全
- java.io包 管道流使用案例
- 【JAVA IO】_管道流笔记
- Java IO--管道流PipedOutputStream/PipedInputStream
- Java自学--IO操作(3) 管道流
- 【JAVA IO】_管道流笔记
- java IO 管道流学习记录
- java解析XML几种方式小结
- iOS开发——纯代码界面(UITabBarController,UINavigationController,UIImageView)
- PAT甲级 1001. A+B Format
- TransactionScope
- Linux中的Vim编辑工具基本命令
- JAVA IO-管道流
- 一些预处理方法的链接
- 第一个java程序解析
- 利用SH函数绘制空间中动态物体
- css3中的部分属性
- 动压滑动轴承油膜涡动诊断要点
- HDU 1233 又是畅通工程 [kruskal]+[prim]【最小生成树入门】
- 第二集:监督学习的应用,梯度下降
- Storm初认识