管道流学习及示例
需要两个线程分别完成读与写,记住:一般情况下 先写入 才能读出来哦!
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
public class PipedStreamStudy {
/**
* @param args
*/
public static void main(String[] args) throws Exception{
PipedInputStream pInputStream = new PipedInputStream();
PipedOutputStream pOutputStream = new PipedOutputStream();
pInputStream.connect(pOutputStream);
Thread thread1 = new Thread(new InputPipe(pInputStream));
Thread thread2 = new Thread(new OutputPipe(pOutputStream));
thread1.start();
thread2.start();
}
}
class InputPipe implements Runnable{
private PipedInputStream pInputStream = null;
public InputPipe(PipedInputStream pInputStream){
this.pInputStream = pInputStream;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
byte[] b = new byte[1024];
int len = pInputStream.read(b);
String string = new String(b, 0, len);
System.out.println("string = " + string);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
pInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class OutputPipe implements Runnable{
private PipedOutputStream pOutputStream = null;
public OutputPipe(PipedOutputStream pOutputStream){
this.pOutputStream = pOutputStream;
}
@Override
public void run() {
// TODO Auto-generated method stub
byte[] b = new byte[100];
try {
pOutputStream.write("abcdefg".getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
pOutputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}