<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    軟件是對質(zhì)量的不懈追求

    java中如何將OutputStream轉換為InputStream(翻譯)

    原文地址:http://ostermiller.org/convert_java_outputstream_inputstream.html

     如果你曾經(jīng)使用java IO編程,你會很快碰到這種情況,某個類在OutputStream上創(chuàng)建數(shù)據(jù)而你需要將它發(fā)送給某個需要從輸入流讀取數(shù)據(jù)的類。
    你很快會被問道,“java中如何將OutputStream轉換為InputStream?”

     方法一:使用字節(jié)數(shù)組緩存數(shù)據(jù)
      最簡單的方法是用字節(jié)數(shù)組緩存數(shù)據(jù)。代碼如下:
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         class1.putDataOnOutputStream(out);
         class2.processDataFromInputStream(
            new ByteArrayInputStream(out.toByteArray())
         );
      于是,OutputStream就被轉換為InputStream了。

    方法二:使用管道
      第一種方法的問題是你必須有足夠的內(nèi)存緩存所有數(shù)據(jù)。你可以使用文件系統(tǒng)緩存更多數(shù)據(jù),但無論如何可處理數(shù)據(jù)的大小還是受到限制。
    解決方法是創(chuàng)建一個線程產(chǎn)生數(shù)據(jù)到PipedOutputStream。當前線程可從中讀取數(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ū)更易于理解。CircularBuffers 有如下優(yōu)點:
         一個CircularBuffers類而不是兩個管道類。
        較于緩存所有數(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());


    posted on 2009-05-17 21:40 BlakeSu 閱讀(1098) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 七色永久性tv网站免费看| 91香蕉在线观看免费高清| 亚洲啪啪综合AV一区| 久久精品毛片免费观看| 亚洲久热无码av中文字幕| 亚洲最大AV网站在线观看| 91制片厂制作传媒免费版樱花| 国产亚洲精aa在线看| 久久久久亚洲av成人无码电影| 久久精品中文字幕免费| 亚洲精品亚洲人成在线 | 久久久久亚洲AV片无码| 国产99视频精品免费观看7| 国产亚洲精品免费| 亚洲成人黄色网址| 最近中文字幕免费mv在线视频| 亚洲精品无码中文久久字幕| 亚洲人成网77777色在线播放| aa级一级天堂片免费观看| 亚洲精品黄色视频在线观看免费资源| 亚洲福利秒拍一区二区| 亚洲精品国产成人影院| 一色屋成人免费精品网站| 成全视成人免费观看在线看| 国产亚洲玖玖玖在线观看| 亚洲午夜精品第一区二区8050| 美女视频黄免费亚洲| 少妇性饥渴无码A区免费| 国产精品亚洲精品久久精品| 亚洲视频免费在线看| 精品国产亚洲男女在线线电影| 无人在线直播免费观看| 久久免费国产精品一区二区| 国产亚洲精品精品精品| 亚洲av专区无码观看精品天堂| 亚洲成AV人在线观看天堂无码| 免费在线观看黄网站| 日本xxwwxxww在线视频免费| 日本人的色道免费网站| 久草视频在线免费看| 久久国产福利免费|