0

可能重复:
OutOfMemoryError:当接收到 2.3 MB 的 XML 响应时

我从 Web 服务中获得了响应字符串,它是 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>
4

2 回答 2

0

尝试字符串缓冲区

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();
于 2012-07-11T11:31:18.267 回答
0

如果您的数据库将数据表示为二进制(而不是character),那么使用中间字符串似乎是错误的方法。您可以使用Blob.setBinaryStream获取用于将数据写入数据库的流。然后,您可以将内容以可管理的块的形式直接从输入流传输到输出流,而无需缓冲整个内容。

如果您想传输输入流的全部内容,甚至不看它,您甚至可以使用CallableStatement.setBlob(String,InputStream)将 BLOB 列直接设置为该流中的数据。

If you have to convert things to character, as the database uses a clob instead of a blob, then similar approaches exist for clob as well, and you could still avoid the intermediate String.

于 2012-07-11T11:35:27.013 回答