2015-06-04 87 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

雖然調試發現「連接重置」發生在中間,因此數據丟失。處理異常以對相同的請求進行受控重試並解決問題。希望對別人有幫助。