Java 的讀寫問題

          A common question when using the IO classes is why this block of code does not work:


          File aFile = new File("input.data");
          InputStream is = new FileInputStream(aFile);
          byte[] data = new byte[aFile.length()];
          is.read(data);

          The results can be puzzling. If the input file is an image it may be mangled or not display at all. Binary or text data may be incomplete. This is because Read Doesn't Do What You Think It Does. A quick glance at the Java API for java.io.InputStream gives us the following information:


          public int read(byte[] b) throws IOException

          Reads some number of bytes from the input stream and stores them
          into the buffer array b. The number of bytes actually read is returned as an integer. . .

          The documentation states that read reads "some number" of bytes. It is not guaranteed to fill the byte array. The number of bytes read is returned by the read method. One should use this return value to make sure that he is receiving the data which he expects. A correct usage of read() would be to read chunks of a file and collect them in a buffer like so:


          ByteArrayOutputStream buffer = new ByteArrayOutputStream();
          File aFile = new File("input.data");
          InputStream is = new FileInputStream(aFile);
          byte[] temp = new byte[1024];
          int read;

          while((read = is.read(temp)) > 0){
             buffer.write(temp, 0, read);
          }
                     
          byte[] data = buffer.toByteArray();
          // process the data array . . .

          posted on 2007-11-01 17:28 劉錚 閱讀(231) 評論(0)  編輯  收藏 所屬分類: JAVA General

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          留言簿(1)

          文章分類(141)

          文章檔案(147)

          搜索

          最新評論

          主站蜘蛛池模板: 县级市| 天长市| 沐川县| 登封市| 龙川县| 兴文县| 景东| 阳春市| 澄迈县| 龙井市| 荣成市| 银川市| 吉水县| 张掖市| 湄潭县| 泽普县| 榕江县| 上栗县| 崇州市| 修武县| 宝鸡市| 江华| 时尚| 南投市| 屏东市| 西藏| 竹溪县| 当涂县| 高邑县| 天门市| 彩票| 苏尼特右旗| 郸城县| 互助| 安新县| 灵璧县| 安达市| 宜宾市| 开封市| 吉首市| 铜川市|