日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IO之管道流

發布時間:2024/8/23 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IO之管道流 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

管道流:

實現兩個線程之間的數據交互. PipedInputStream PipedOutputStream PipedReder
PipedWriter

中文API解釋:
PipedInputStream

public class PipedInputStreamextends InputStream管道輸入流應該連接到管道輸出流;管道輸入流提供要寫入管道輸出流的所有數據字節。通常,數據由某個線程從 PipedInputStream 對象讀取,并由其他線程將其寫入到相應的 PipedOutputStream。不建議對這兩個對象嘗試使用單個線程,因為這樣可能死鎖線程。管道輸入流包含一個緩沖區,可在緩沖區限定的范圍內將讀操作和寫操作分離開。如果向連接管道輸出流提供數據字節的線程不再存在,則認為該管道已損壞。

PipedOutputStream

public class PipedOutputStreamextends OutputStream可以將管道輸出流連接到管道輸入流來創建通信管道。管道輸出流是管道的發送端。通常,數據由某個線程寫入 PipedOutputStream 對象,并由其他線程從連接的 PipedInputStream 讀取。不建議對這兩個對象嘗試使用單個線程,因為這樣可能會造成該線程死鎖。如果某個線程正從連接的管道輸入流中讀取數據字節,但該線程不再處于活動狀態,則該管道被視為處于 毀壞 狀態。


練習代碼:


class AThread extends Thread{private PipedOutputStream out = new PipedOutputStream();public PipedOutputStream getOut(){return this.out;}@Overridepublic void run() {try {for(int i = 65 ;i < 65 + 26; i++){out.write(i);}} catch (IOException e) {e.printStackTrace();}}}class BThread extends Thread{private PipedInputStream in = null;public BThread(AThread aThread) throws Exception{in = new PipedInputStream(aThread.getOut());}@Overridepublic void run() {int len = -1;try {while ((len = in.read()) != -1){System.out.println((char)len);}in.close();}catch (Exception e){e.printStackTrace();}}}@Testpublic void t() throws Exception {AThread aThread = new AThread();BThread bThread = new BThread(aThread);aThread.start();bThread.start();}

輸出(結果每次運行都不相同):
A
B
C
D
E
F
G
H
I

J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z

總結

以上是生活随笔為你收集整理的IO之管道流的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。