91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中怎么將OutputStream 轉換成InputStream

發布時間:2021-06-22 16:44:28 來源:億速云 閱讀:3101 作者:Leah 欄目:編程語言

Java中怎么將OutputStream 轉換成InputStream,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

一、使用byte array緩存轉換

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ByteArrayInputStream swapStream = new ByteArrayInputStream(baos.toByteArray());

這種方式最為簡單,但是要求執行baos.toByteArray()這個方法之前,需要的數據已經完全寫入,即無法做到邊寫邊讀,另外其需要足夠的內存來一次性的容納這些數據。

二、使用Pipes

PipedInputStream in = new PipedInputStream();
PipedOutputStream out = new PipedOutputStream(in);
new Thread(
  new Runnable(){
    public void run(){
      class1.putDataOnOutputStream(out);
    }
  }
).start();
class2.processDataFromInputStream(in);

 顧名思義,pipe即為管道,這種方法支持流式的方式,一端寫一端讀,向PipedOutputStream寫入的數據可以從PipedInputStream讀出,很好的解決了方法一中的短處,是個人較為推薦的一種方式。

注意:

  • PipedInputStream中存儲數據的數組大小默認為1024,且使用過程中不可擴充,當一次性寫入的數據超過這個數,則會有個AssertionError拋出。當然,我們可以在初始化PipedInputStream的時候進行設置。

  • 上述代碼僅為pipe的一種使用的方式,其也可以初始化如下:

PipedOutputStream out = new PipedOutputStream();
PipedInputStream in = new PipedInputStream(out);

 兩種方式等價。

三、使用Circular Buffers

作為PipedInputStreamPipedOutputStream的一種替代方式,CircularBuffer有著更為簡單的數據結構和使用方法,但是其并不是JDK自帶的類需要額外引入。

<!-- https://mvnrepository.com/artifact/org.ostermiller/utils -->
<dependency>
    <groupId>org.ostermiller</groupId>
    <artifactId>utils</artifactId>
    <version>1.07.00</version>
</dependency>
CircularByteBuffer cbb = new CircularByteBuffer();
new Thread(
  new Runnable(){
    public void run(){
      class1.putDataOnOutputStream(cbb.getOutputStream());
    }
  }
).start();
class2.processDataFromInputStream(cbb.getInputStream());

 如上,CircularByteBufferInputStreamOutputStream作為其屬性,相對于方法二使用更為簡化,且更易理解。

注意:

  • 方法二方法三使用類似,但是其不建議再同一個線程中處理OutputStramInputStream,以為容易造成死鎖的問題

  • 方法二方法三中,當數組滿的時候,需要等待消費,造成block,所以建議使用者初始化的時候根據使用情況來定義初始容量。 

看完上述內容,你們掌握Java中怎么將OutputStream 轉換成InputStream的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巢湖市| 安乡县| 阜宁县| 常宁市| 望谟县| 句容市| 宝应县| 昭觉县| 阿巴嘎旗| 儋州市| 鸡西市| 高陵县| 读书| 额济纳旗| 延安市| 精河县| 道真| 冀州市| 太保市| 乌恰县| 南木林县| 江达县| 临桂县| 温州市| 无为县| 松原市| 莲花县| 普洱| 定远县| 吉首市| 彭泽县| 河西区| 化隆| 商南县| 张家口市| 临澧县| 靖安县| 岚皋县| 莫力| 黄冈市| 鹤庆县|