outputstream轉inputstream, 如何將outputstream轉換成inputstream?不知道小伙伴們今天來看看邊肖的分享吧!
有三種方法可以將outputstream轉換成inputstream。
方法1:使用字節(jié)數(shù)組緩存數(shù)據(jù),并輸入代碼:
ByteArrayOutputStream out=new ByteArrayOutputStream();
class1.putDataOnOutputStream(out);
class2.processDataFromInputStream(
new ByteArrayInputStream(out.toByteArray())
);
方法二:使用管道。
第一種方法的問題是你必須有足夠的內存來緩存所有的數(shù)據(jù)。您可以使用文件系統(tǒng)來緩存更多的數(shù)據(jù),但是您可以處理的數(shù)據(jù)大小仍然是有限的。
解決方案是創(chuàng)建一個線程來為PipedOutputStream生成數(shù)據(jù)。當前線程可以從中讀取數(shù)據(jù)。
輸入代碼:
PipedInputStream in=new PipedInputStream();
PipedOUtputStream out=new PipedOutputStream(in);
new Thread(
new Runnable(){
public void run(){
class1.putDataOnOutputStream(out);
}
}
).start();
class2.processDataFromInputStream(in);|||
方法三:使用循環(huán)緩沖區(qū)。
第二種方法中的兩個管道流實際上管理一個隱藏的循環(huán)緩沖區(qū)。使用顯式循環(huán)緩沖區(qū)更容易理解。循環(huán)緩沖液有以下優(yōu)點。
一個CircularBuffers類而不是兩個pipeline類。
它比緩存所有數(shù)據(jù)和額外線程更容易使用。
可以改變緩存大小,而不受流水線緩存區(qū)1K的固定緩存大小的限制。
多線程案例:
CircularByteBuffer cbb=new CircularByteBuffer();
new Thread(
new Runnable(){
public void run(){
class1.putDataOnOutputStream(cbb.getOutputStream());
}
}
).start();
class2.processDataFromInputStream(cbb.getInputStream());
單線程案例
//buffer all data in a circular buffer of infinite size
CircularByteBuffer cbb=new CircularByteBuffer(CircularByteBuffer.INFINITE_SIZE);
class1.putDataOnOutputStream(cbb.getOutputStream());
class2.processDataFromInputStream(cbb.getInputStream());
outputstream轉inputstream,以上就是本文為您收集整理的outputstream轉inputstream最新內容,希望能幫到您!更多相關內容歡迎關注。