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)

          搜索

          最新評論

          主站蜘蛛池模板: 藁城市| 高阳县| 岚皋县| 阳朔县| 玛曲县| 东安县| 西宁市| 松江区| 修武县| 昔阳县| 上犹县| 长垣县| 子洲县| 会宁县| 固原市| 都兰县| 桂平市| 鹿邑县| 漠河县| 乌拉特中旗| 昌都县| 安顺市| 三明市| 潼关县| 揭西县| 广水市| 永泰县| 长顺县| 和龙市| 旺苍县| 怀安县| 莱西市| 三台县| 大同市| 南安市| 罗定市| 安乡县| 揭东县| 祁阳县| 耒阳市| 东阿县|