海詩網(wǎng) 知識百科 outputstream轉inputstream(outputstream轉inputstream)

outputstream轉inputstream(outputstream轉inputstream)

outputstream轉inputstream, 如何將outputstream轉換成inputstream?不知道小伙伴們今天來看看邊肖的分享吧!

有三種方法可以將outputstream轉換成inputstream。

方法1:使用字節(jié)數(shù)組緩存數(shù)據(jù),并輸入代碼:

ByteArrayOutputStream out=new ByteArrayOutputStream();

class1.putDataOnOutputStream(out);

class2.processDataFromInputStream(

new ByteArrayInputStream(out.toByteArray())

);

outputstream轉inputstream

方法二:使用管道。

第一種方法的問題是你必須有足夠的內存來緩存所有的數(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);|||

outputstream轉inputstream

方法三:使用循環(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最新內容,希望能幫到您!更多相關內容歡迎關注。

本文來自網(wǎng)絡,不代表海詩網(wǎng)立場,轉載請注明出處:http://x91880.com/n/169093.html
      

java(java編程入門到精通)

發(fā)表回復
聯(lián)系我們
聯(lián)系我們

在線咨詢: QQ交談

郵箱: 3587015498@qq.com

工作時間:周一至周五,9:00-17:30,節(jié)假日休息

關注微信
微信掃一掃關注我們
微信掃一掃關注我們
關注微博
返回頂部