2015-06-04 122 views
0

我正在尝试读取输入流的块和写入文件以避免内存问题,我以json格式接收数据并使用以下代码写入文件。从InputStream读取BufferedReader.read时出现

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,任何想法?

+0

在这种普通的循环中,你应该使用'compact()',而不是'clear()',但是在这种情况下它不会有任何区别。 – EJP

回答

0

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