MDA/MDD/TDD/DDD/DDDDDDD
          posts - 536, comments - 111, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          原來BufferedReader不能和InputStream交替使用(轉)

          Posted on 2007-08-03 01:23 leekiang 閱讀(9329) 評論(1)  編輯  收藏 所屬分類: java
          最近寫代碼時發現用BufferedReader把InputStream包裝后,使用BufferedReader讀取后,然后再使用 InputStream讀取時總是發現問題,好像總是丟數據,由于我在流里面同時混了二進制數據與字符串,所以很不好調度,然后專門寫了下面的代碼去測試發現原來是. BufferedReader讀取數據時會把數據從流里面取出一部分緩存,如果你再轉向去用InputStream去讀取的話,BufferedReader緩存里面的數據InputStream是讀取不到的 .


          package bytearray;

          import java.io.BufferedReader;
          import java.io.ByteArrayInputStream;
          import java.io.DataInputStream;
          import java.io.IOException;
          import java.io.InputStream;
          import java.io.InputStreamReader;

          public class TestByteArray {

          public byte[] generateByte() {
          // 構造一個測試流,這樣就不用從文件里面讀取了,在這個流里面使用了大量的回車換行("\r\n"),這樣方便過會的測試
          // 過會,我會通過把字符串轉換成byte數組,然后通過ByteArrayInputStream來構造一個數據流
          return "a\r\nbc\r\ndef\r\nghi\r\nj\r\nklmn\r\nopqr\r\ns\r\ntuvwxyz "
          .getBytes();

          }

          public static void main(String[] args) throws IOException {
          // TODO Auto-generated method stub
          TestByteArray self = new TestByteArray();
          byte[] be = self.generateByte();
          InputStream in = new ByteArrayInputStream(be);
          BufferedReader bufferReader = new BufferedReader(new InputStreamReader(
          in));
          // 使用DataInputStream而不直接使用Inputstream是因為這樣方便,因為他提供了讀取行
          // 不過聽說他讀取行時把字節轉變為字符時會有問題,所以不推薦使用,不過我們在這只做測試就沒關系了
          DataInputStream dataInputStream = new DataInputStream(in);

          // 先讀取流里面的一行數據
          System.out.println("bufferReader=" + bufferReader.readLine());
          // 回過頭來使用dataInputStream讀取數據,會發現什么也讀取不到
          System.out.println("dataInputStream=" + dataInputStream.readLine());
          // 回過頭來使用inputstream讀取數據,會發現什么也讀取不到
          System.out.println("in=" + in.read());
          // InputStream讀取不到數據,然后再使用原來的BufferedReader來讀取數據,發現是接著原來讀取的.
          System.out.println("bufferReader=" + bufferReader.readLine());

          //我們上面的字符串比較小,我想如果字符串,大到緩存裝不下的時候,使用inputstream回頭去讀取數據,肯定是能讀取到的
          //這個我就不測試了

          }

          }
          轉自 http://itspy.spaces.live.com/blog/cns!87AF3B24336DF461!180.entry

          評論

          # re: 原來BufferedReader不能和InputStream交替使用(轉)[未登錄]  回復  更多評論   

          2011-11-13 11:00 by Java學習者
          那如何解決上面的內容呢
          BufferedReader br = new BufferedReader(new InputStreamReader(
          System.in);
          int read=13;
          while((read=br.read())!=13)在測試運行時會出現int不能轉換Boolean
          請問如何解決
          主站蜘蛛池模板: 库伦旗| 天镇县| 罗山县| 苗栗县| 奎屯市| 会理县| 高阳县| 望城县| 永仁县| 顺平县| 崇明县| 汉川市| 宜宾县| 宜良县| 普格县| 扶绥县| 永福县| 平舆县| 金乡县| 广饶县| 苏尼特左旗| 金昌市| 海原县| 巴南区| 讷河市| 阿克陶县| 峨眉山市| 南京市| 正安县| 无棣县| 交口县| 那坡县| 武安市| 枝江市| 永平县| 石楼县| 梨树县| 金乡县| 桃江县| 炉霍县| 广安市|