【问题标题】:InputStream read doesn't read the dataInputStream 读取不读取数据
【发布时间】:2010-11-18 02:33:08
【问题描述】:

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

        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);
        }

我错过了什么?

任何帮助表示赞赏:)

【问题讨论】:

    标签: java inputstream


    【解决方案1】:

    你试过用 readline() 代替 read() 吗?

    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();
    }
    

    【讨论】:

    • 假设它是从文本数据开始的,并且不知道为什么会发生这种情况。
    【解决方案2】:

    您从哪里获取输入流?你怎么知道是29K-31K?

    您的代码在我看来是合理的,尽管我通常在循环结构上稍有不同以避免read 调用的重复。

    【讨论】:

    • 我知道 inputStream 来自 HTTPConnection,但我错过的是我的同事添加了一行来测试导致错误的自定义 InputStream 类。应该早点回去,谢谢提示! :)
    猜你喜欢
    • 1970-01-01
    • 2011-12-14
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 2015-05-11
    • 2012-03-03
    相关资源
    最近更新 更多