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

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

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

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

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

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

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

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

    方法二:使用管道
      第一種方法的問題是你必須有足夠的內(nèi)存緩存所有數(shù)據(jù)。你可以使用文件系統(tǒng)緩存更多數(shù)據(jù),但無論如何可處理數(shù)據(jù)的大小還是受到限制。
    解決方法是創(chuàng)建一個線程產(chǎn)生數(shù)據(jù)到PipedOutputStream。當(dāng)前線程可從中讀取數(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 閱讀(1100) 評論(0)  編輯  收藏


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 女人18特级一级毛片免费视频| a视频在线免费观看| 一个人看的www在线观看免费| 亚洲人成电影在线天堂| 成在线人免费无码高潮喷水| 国产亚洲精品看片在线观看 | 久久国产精品免费视频| 亚洲人成网7777777国产| 国产成人免费AV在线播放 | 黄床大片免费30分钟国产精品| 亚洲人成人无码网www国产| 羞羞视频免费网站日本| 精品亚洲一区二区三区在线观看 | 好吊妞998视频免费观看在线| 亚洲熟妇少妇任你躁在线观看| 成人黄18免费视频| 精品国产亚洲AV麻豆| 亚洲国产av一区二区三区| 国产精品玖玖美女张开腿让男人桶爽免费看 | 免费一级毛片清高播放| www成人免费视频| 亚洲bt加勒比一区二区| 国产电影午夜成年免费视频| 亚洲色无码国产精品网站可下载| 国产成人精品男人免费| 精品人妻系列无码人妻免费视频| 久久国产精品亚洲综合| 一个人免费观看视频www| 黄色一级毛片免费看| 亚洲av无码乱码国产精品| 高潮内射免费看片| 国产亚洲欧洲精品| 无码毛片一区二区三区视频免费播放 | 亚洲成av人影院| 成在线人直播免费视频| 亚洲成av人在线视| 免费观看毛片视频| 国产一级淫片a免费播放口| 亚洲一区二区三区无码国产| 亚洲日本一区二区三区在线不卡| 少妇太爽了在线观看免费视频|