从InputStream读取时遇到BufferedReader.read问题

时间:2015-06-04 09:50:37

标签: inputstream bufferedreader

我正在尝试以块的形式读取输入流并写入文件以避免内存问题,我正在以json格式接收数据,并使用以下代码写入文件。

BufferedReader rd =
    new BufferedReader(new InputStreamReader(conn.getInputStream()));
    BufferedWriter writer = null;
    if(getOutputFormat().equals(Constants.URI_FORMAT_JSON)){

    boolean enableAppend = true;
    CharBuffer buffer = CharBuffer.allocate(1024);
    writer = new BufferedWriter(new      FileWriter(request.getJsonFile(isNewFile),enableAppend));
    int readState = 0;
    while ((readState = rd.read(buffer)) != -1) {
        buffer.flip();

        if(isNewFile){
            writer.write(buffer.toString());
            isNewFile = false;
        }else {
            writer.append(buffer.toString());
        }
        buffer.clear();
    }

    writer.newLine();
    writer.flush();
    writer.close(); 
}

我的问题是,大多数json写得很好,虽然其中一些包含破碎的数据,我不确定我是否正确使用BufferedReader的CharBuffer,我观察到的另一件事是,对于少量数据 - 它正确地进入CharBuffer并写入文件,当我从服务器接收到更大的数据(输入流中大约2MB - 不是很大)时,我主要面对它。也使用readLine方法验证工作正常,但我想以块的形式读取数据,因此使用CharBuffer,任何想法?

1 个答案:

答案 0 :(得分:0)

虽然调试发现“连接重置”发生在中间,因此数据丢失。处理异常以对同一请求进行受控重试,并解决问题。希望对某人有所帮助。