我已經很好地將它們用在了我的項目中,它們對於修改流中的流並將它們傳遞出去非常寶貴。唯一的缺點似乎是的PipedInputStream有過短暫的緩衝(1024左右)和我的OutputStream圍繞8KBs抽英寸
它沒有缺陷,它工作得很好。在常規
public class Runner{
final PipedOutputStream source = new PipedOutputStream();
PipedInputStream sink = new PipedInputStream();
public static void main(String[] args) {
new Runner().doit()
println "Finished main thread"
}
public void doit() {
sink.connect(source)
(new Producer(source)).start()
BufferedInputStream buffer = new BufferedInputStream(sink)
(new Consumer(buffer)).start()
}
}
class Producer extends Thread {
OutputStream source
Producer(OutputStream source) {
this.source=source
}
@Override
public void run() {
byte[] data = new byte[1024];
println "Running the Producer..."
FileInputStream fout = new FileInputStream("/Users/ganesh/temp/www/README")
int amount=0
while((amount=fout.read(data))>0)
{
String s = new String(data, 0, amount);
source.write(s.getBytes())
synchronized (this) {
wait(5);
}
}
source.close()
}
}
class Consumer extends Thread{
InputStream ins
Consumer(InputStream ins)
{
this.ins = ins
}
public void run()
{
println "Consumer running"
int amount;
byte[] data = new byte[1024];
while ((amount = ins.read(data)) >= 0) {
String s = new String(data, 0, amount);
println "< $s"
synchronized (this) {
wait(5);
}
}
}
}
這個http://stackoverflow.com/questions/484119/why-doesnt-more-java-code-use-pipedinputstream-pipedoutputstream種類覆蓋它。它們並不是真正的「缺陷」,只是有點棘手,通常也是一種符號代碼味道,如果你100%肯定你需要它們,而且在設計中沒有錯誤,那麼使用它們就沒有真正的問題...... – TC1 2012-02-28 14:42:24
快速查看我想使用的一個。它至少是「特色下」,因爲閱讀線程並不真正等待寫入線程寫入完整的讀取請求,並且在編寫器關閉它時等待EOF異常。它具有非常原始的線程處理和同步,並且要求緩衝區與最大讀取請求一樣大。 – peterk 2013-03-27 00:17:59