IO基本使用方法

管道流用于线程之间的通信。

PipedInputStream类与PipedOutputStream类用于在应用程序中创建管道通信.一个PipedInputStream实例对象必须和一个PipedOutputStream实例对象进行连接而产生一个通信管道.PipedOutputStream可以向管道中写入数据,PipedIntputStream可以读取PipedOutputStream向管道中写入的数据.这两个类主要用来完成线程之间的通信.一个线程的PipedInputStream对象能够从另外一个线程的PipedOutputStream对象中读取数据.

一个线程的PipedInputStream对象从另外一个线程的PipedOutputStream对象读取输入。要使管道流有用,必须同时构造管道输入流和管道输出流。

一共有两种方式实现管道流:

方法1 : 使用Connect进行连接

写入管道:

[java]  view plain  copy
  1. 代码  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PipedOutputStream;  
  5.   
  6. public class Producer extends Thread {  
  7.     private PipedOutputStream pos;  
  8.   
  9.     public Producer(PipedOutputStream pos) {  
  10.         this.pos = pos;  
  11.     }  
  12.   
  13.     @Override  
  14.     public void run() {  
  15.         super.run();  
  16.         try {  
  17.             pos.write("Hello".getBytes());  
  18.         } catch (IOException e) {  
  19.             e.printStackTrace();  
  20.         }  
  21.     }  
  22. }  
从管道读出:
[java]  view plain  copy
  1. 代码  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PipedInputStream;  
  5.   
  6. public class Consumer extends Thread {  
  7.     private PipedInputStream pis;  
  8.   
  9.     public Consumer(PipedInputStream pis) {  
  10.         this.pis = pis;  
  11.     }  
  12.   
  13.     @Override  
  14.     public void run() {  
  15.         super.run();  
  16.         byte[] b = new byte[100]; // 将数据保存在byte数组中  
  17.         try {  
  18.             int len = pis.read(b); // 从数组中得到实际大小。  
  19.             System.out.println(new String(b, 0, len));  
  20.             pis.close();  
  21.         } catch (IOException e) {  
  22.             e.printStackTrace();  
  23.         }  
  24.     }  
  25. }  

Main:

[java]  view plain  copy
  1. PipedStreamTest  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PipedInputStream;  
  5. import java.io.PipedOutputStream;  
  6.   
  7. public class PipedStreamTest {  
  8.     public static void main(String[] args) {  
  9.         PipedOutputStream pos = new PipedOutputStream();  
  10.         PipedInputStream pis = new PipedInputStream();  
  11.         try {  
  12.             pos.connect(pis);// 连接管道  
  13.   
  14.             new Producer(pos).start();// 启动线程  
  15.   
  16.             new Consumer(pis).start();// 启动线程  
  17.   
  18.         } catch (IOException e) {  
  19.             e.printStackTrace();  
  20.         }  
  21.     }  
  22. }  
从管道读出:
[java]  view plain  copy
  1. 代码  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PipedInputStream;  
  5.   
  6. public class Consumer extends Thread {  
  7.     private PipedInputStream pis;  
  8.   
  9.     public Consumer(PipedInputStream pis) {  
  10.         this.pis = pis;  
  11.     }  
  12.   
  13.     @Override  
  14.     public void run() {  
  15.         super.run();  
  16.         byte[] b = new byte[100]; // 将数据保存在byte数组中  
  17.         try {  
  18.             int len = pis.read(b); // 从数组中得到实际大小。  
  19.             System.out.println(new String(b, 0, len));  
  20.             pis.close();  
  21.         } catch (IOException e) {  
  22.             e.printStackTrace();  
  23.         }  
  24.     }  
  25. }  

Main:

[java]  view plain  copy
  1. PipedStreamTest  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PipedInputStream;  
  5. import java.io.PipedOutputStream;  
  6.   
  7. public class PipedStreamTest {  
  8.     public static void main(String[] args) {  
  9.         PipedOutputStream pos = new PipedOutputStream();  
  10.         PipedInputStream pis = new PipedInputStream();  
  11.         try {  
  12.             pos.connect(pis);// 连接管道  
  13.   
  14.             new Producer(pos).start();// 启动线程  
  15.   
  16.             new Consumer(pis).start();// 启动线程  
  17.   
  18.         } catch (IOException e) {  
  19.             e.printStackTrace();  
  20.         }  
  21.     }  
  22. }  

猜你喜欢

转载自blog.csdn.net/chehec2010/article/details/80360164