从 InputStream 读取时出现 BufferedReader.read 问题
Issue with BufferedReader.read while reading from InputStream
我正在尝试分块读取输入流并写入文件以避免内存问题,我正在接收 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 都写得很好,而其中一些包含损坏的数据,我不确定我是否正确使用 CharBuffer BufferedReader,我观察到的另一件事是,对于少量数据 - 它正确地接收到 CharBuffer 并写入文件,当我从服务器接收到更大的数据(输入流中大约 2MB - 不是很大)时,我主要面对它.还使用 readLine 方法进行了验证,该方法工作正常,但我想分块读取数据,因此使用 CharBuffer,知道吗?
虽然调试发现 "connection reset" 发生在中间,因此数据丢失。处理异常以对同一请求进行受控重试,问题得到解决。希望对大家有帮助。
我正在尝试分块读取输入流并写入文件以避免内存问题,我正在接收 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 都写得很好,而其中一些包含损坏的数据,我不确定我是否正确使用 CharBuffer BufferedReader,我观察到的另一件事是,对于少量数据 - 它正确地接收到 CharBuffer 并写入文件,当我从服务器接收到更大的数据(输入流中大约 2MB - 不是很大)时,我主要面对它.还使用 readLine 方法进行了验证,该方法工作正常,但我想分块读取数据,因此使用 CharBuffer,知道吗?
虽然调试发现 "connection reset" 发生在中间,因此数据丢失。处理异常以对同一请求进行受控重试,问题得到解决。希望对大家有帮助。