代码之家  ›  专栏  ›  技术社区  ›  Tamar

InputStream读取不读取数据

  •  0
  • Tamar  · 技术社区  · 16 年前

    我在读取java输入流时遇到问题。我有一个1024大小的缓冲区和一个29k-31k大小的输入流。我在循环中读取inputStream,但第一次读取只得到29个字节,第二次读取得到39个字节,之后什么都没有。对于不同的InputStreams,同样的行为会重复。(我正在将数据写入输出流,但我看不出这会对第一次读取产生什么影响)

            int bytesRead = 0;
            byte[] byteBuf = new byte[1024];
    
            OutputStream fileStream = FileUtil.openFileForWrite(saveTo);
    
            bytesRead = reader.read(byteBuf);
            while(bytesRead!=-1){
                fileStream.write(byteBuf, 0, bytesRead);
                bytesRead = reader.read(byteBuf);
            }
    

    2 回复  |  直到 16 年前
        1
  •  1
  •   Jon Skeet    16 年前

    在我看来,你的代码很合理,尽管我通常会稍微改变循环的结构,以避免重复 read 电话。

        2
  •  0
  •   Jeff Leonard    16 年前

    Path file = ...;
    InputStream in = null;
    try {
        in = file.newInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        String line = null;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
    } catch (IOException x) {
        System.err.println(x);
    } finally {
        if (in != null) in.close();
    }
    
    推荐文章