2012-07-11 68 views
0

可能重複:
OutOfMemoryError : When receiving XML response of 2.3 MB如何在字符串中存儲大型二進制數據?

我從網絡服務,這是大量的XML格式的二進制字符串的響應串。我可以將響應數據存儲到對象中。但我想分析這些響應並將其存儲到本地數據庫中。所以我必須將對象數據轉換爲字符串。如果我將對象數據轉換爲字符串。它發生「內存問題」。

我的迴應是這樣的

<xmlstring> 
<oneslip>78364</oneslip> 
<threeslip>Hello</threeslip> 
<twoslip>3</twoslip> 
<Binarydata>"Here the large amount of binary data"</Binarydata> 

<oneslip>78364</oneslip> 
<threeslip>Hello</threeslip> 
<twoslip>3</twoslip> 
<Binarydata>"Here the large amount of binary data"</Binarydata> 

.. 
.. 
.. 

最多的50

</xmlstring> 
+0

嘗試使用StringBuffer而不是字符串 – 2012-07-11 11:18:49

+0

@imrankhan當您可以使用StringBuilder時,請不要使用StringBuffer。 – 2012-08-13 07:54:57

回答

0

嘗試StringBuffer

bufferedReader = new BufferedReader(
        new InputStreamReader(
         response.getEntity().getContent())); 

StringBuffer stringBuffer = new StringBuffer(""); 
String line = ""; 
String LineSeparator = System.getProperty("line.separator"); 

while ((line = bufferedReader.readLine()) != null) { 
    stringBuffer.append(line + LineSeparator); 
} 

bufferedReader.close(); 
+0

爲什麼不'StringBuilder'?首先,爲什麼'String'不接受大尺寸數據?我們是否試圖找到原因? – overexchange 2017-07-10 18:28:14

0

如果你的數據庫表示數據二進制(而不是字符),那麼使用中間字符串似乎是錯誤的做法。您可以使用Blob.setBinaryStream獲取將數據寫入數據庫的流。然後,您可以將可管理塊中的內容直接從輸入流傳輸到輸出流,而無需緩衝整個內容。

如果您想要傳輸輸入流的全部內容,甚至無需查看它,甚至可以使用CallableStatement.setBlob(String,InputStream)將BLOB列直接設置爲來自該流的數據。

如果你必須把東西轉換成字符,因爲數據庫使用clob而不是blob,那麼對於clob也存在類似的方法,並且你仍然可以避免使用中間字符串。

相關問題