• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    J2SE綜合:在Java程序中截獲控制臺輸出 (2)

    發布: 2008-5-08 10:04 | 作者: 不詳 | 來源: 賽迪網技術社區 | 查看: 44次 | 進入軟件測試論壇討論

    領測軟件測試網


    startByteArrayReaderThread()方法是整個類真正的關鍵所在。這個方法的目標很簡單,就是創建一個定期地檢查 ByteArrayOutputStream緩沖區的線程。緩沖區中找到的所有數據都被提取到一個byte數組,然后寫入到 PipedOutputStream。由于PipedOutputStream對應的PipedInputStream由getInputStream ()返回,從該輸入流讀取數據的線程都將讀取到原先發送給ByteArrayOutputStream的數據。前面提到,LoopedStreams類解決了管道流存在的前二個問題,我們來看看這是如何實現的。

    ByteArrayOutputStream具有根據需要擴展其內部緩沖區的能力。由于存在“完全緩沖”,線程向getOutputStream()返回的流寫入數據時不會被阻塞。因而,第一個問題不會再給我們帶來麻煩。另外還要順便說一句,ByteArrayOutputStream的緩沖區永遠不會縮減。例如,假設在能夠提取數據之前,有一塊500 K的數據被寫入到流,緩沖區將永遠保持至少500 K的容量。如果這個類有一個方法能夠在數據被提取之后修正緩沖區的大小,它就會更完善。

    第二個問題得以解決的原因在于,實際上任何時候只有一個線程向PipedOutputStream寫入數據,這個線程就是由 startByteArrayReaderThread()創建的線程。由于這個線程完全由LoopedStreams類控制,我們不必擔心它會產生 IOException異常。

    LoopedStreams類還有一些細節值得提及。首先,我們可以看到byteArrayOS和pipedIS實際上分別是 ByteArrayOutputStream和PipedInputStream的派生類的實例,也即在它們的close()方法中加入了特殊的行為。如果一個LoopedStreams對象的用戶關閉了輸入或輸出流,在startByteArrayReaderThread()中創建的線程必須關閉。覆蓋后的close()方法把keepRunning標記設置成false以關閉線程。另外,請注意startByteArrayReaderThread ()中的同步塊。要確保在toByteArray()調用和reset()調用之間ByteArrayOutputStream緩沖區不被寫入流的線程修改,這是必不可少的。由于ByteArrayOutputStream的write()方法的所有版本都在該流上同步,我們保證了 ByteArrayOutputStream的內部緩沖區不被意外地修改。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    65/6<123456>

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>