黑马程序员技术交流社区
标题:
有关管道流的一个问题?
[打印本页]
作者:
肖勇
时间:
2013-9-25 00:32
标题:
有关管道流的一个问题?
什么时候要用管道流啊!他有什么好处?看老毕的视频时,有点不清楚!请各位大神解释下。。。
作者:
陈洋
时间:
2013-9-25 00:50
管道流可以实现两个线程之间,二进制数据的传输。
管道流就像一条管道,一端输入数据,别一端则输出数据。通常要分别用两个不同的线程来控制它们。
使用方法如下:
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
public class PipedInputStreamTest {
public static void main(String[] args) {
//管道输出流
PipedOutputStream out = new PipedOutputStream();
//管道输入流
PipedInputStream in = null;
try {
//连接两个管道流。或者调用connect(Piped..);方法也可以
in = new PipedInputStream(out);
Thread read = new Thread(new Read(in));
Thread write = new Thread(new Write(out));
//启动线程
read.start();
write.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Write implements Runnable {
PipedOutputStream pos = null;
public Write(PipedOutputStream pos) {
this.pos = pos;
}
public void run() {
try {
System.out.println("程序将在3秒后写入数据,请稍等。。。");
Thread.sleep(3000);
pos.write("wangzhihong".getBytes());
pos.flush();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
try {
if (pos != null) {
pos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class Read implements Runnable {
PipedInputStream pis = null;
public Read(PipedInputStream pis) {
this.pis = pis;
}
public void run() {
byte[] buf = new byte[1024];
try {
pis.read(buf);
System.out.println(new String(buf));
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (pis != null) {
pis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2