2013-02-22 73 views
0

我有一個方法,我有一個String對象的數組,我需要寫入一個ByteArrayOutputStream,稍後我將寫入ZipOutputStream。OutOfMemoryError雖然寫字符串ByteArrayOutputStream

這是我的代碼。

// SAVE THE STRING AS A BYTE ARRAY IN MEMORY INSTEAD OF CREATING AND SAVING TO A NEW FILE 
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      DataOutputStream byteOut = new DataOutputStream(baos); 
      byte[] data; 
      if (i == 1) { 
       if (nodeStringArray != null) { 
        for (String s : nodeStringArray) { 
         byteOut.write(s.getBytes("UTF-8")); 
        } 
       } 
      } else { 
       data = stringArray.get(i).getBytes("UTF-8"); 
       byteOut.write(data); 
      } 


      byteOut.close(); 
      byte[] input = baos.toByteArray(); 

      ZipEntry entry = new ZipEntry(fileName); 
      entry.setSize(input.length); 
      zos.putNextEntry(entry); 
      zos.write(input); 
      zos.closeEntry(); 

的問題是,我也只能在崩潰報告收到了它,我越來越對讀取byteOut.write(s.getBytes("UTF-8"));

任何人都知道這樣做的更好的方法或可以看到,如果行的OutOfMemoryError我做錯了什麼?

IDEA

我可以把周圍的問題,嘗試catch語句,當它發生的呼叫byteOut.flush()

預先感謝

回答

3

你正在爲數據的多個副本,這也是造成你耗盡內存。

您應該直接在您的第一個循環中寫入ZipOutputStream

ZipEntry entry = new ZipEntry(fileName); 
zos.putNextEntry(entry); 
for (String s : nodeStringArray) { 
    zos.write(s.getBytes("UTF-8")); 
} 
zos.closeEntry(); 
+0

我喜歡簡單的 – StuStirling 2013-02-22 13:22:05

相關問題