android 内存查找字符串,Android:在不耗尽内存的情况下将流转换为字符串

我有一个android客户端,可通过REST风格的端点和JSON与服务器进行通信。因此,我需要先检索完整的服务器响应,然后再将其转换为哈希。我有以下代码可以做到这一点(可以在某个地方的互联网上找到):

private static String convertStreamToString(InputStream is) {

BufferedReader reader = new BufferedReader(new InputStreamReader(is));

StringBuilder sb = new StringBuilder();

String line = null;

try {

while ((line = reader.readLine()) != null) {

sb.append(line + "\n");

}

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

is.close();

} catch (IOException e) {

e.printStackTrace();

}

}

return sb.toString();

}

该代码在大多数情况下有效,但是我在行中看到OutOfMemory异常的客户端发生崩溃的报告:

while ((line = reader.readLine()) != null) {

完整的堆栈跟踪为:

java.lang.RuntimeException: An error occured while executing doInBackground()

at android.os.AsyncTask$3.done(AsyncTask.java:200)

at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)

at java.util.concurrent.FutureTask.setException(FutureTask.java:124)

at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)

at java.util.concurrent.FutureTask.run(FutureTask.java:137)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)

at java.lang.Thread.run(Thread.java:1102)

Caused by: java.lang.OutOfMemoryError

at java.lang.String.(String.java:468)

at java.lang.AbstractStringBuilder.toString(AbstractStringBuilder.java:659)

at java.lang.StringBuilder.toString(StringBuilder.java:664)

at java.io.BufferedReader.readLine(BufferedReader.java:448)

at com.appspot.myapp.util.RestClient.convertStreamToString(RestClient.java:303)

at com.appspot.myapp.util.RestClient.executeRequest(RestClient.java:281)

at com.appspot.myapp.util.RestClient.Execute(RestClient.java:178)

at com.appspot.myapp.$LoadProfilesTask.doInBackground(GridViewActivity.java:1178)

at com.appspot.myapp.$LoadProfilesTask.doInBackground(GridViewActivity.java:1)

at android.os.AsyncTask$2.call(AsyncTask.java:185)

at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)

... 4 more

我的问题:除了从服务器发送较小的数据块外,还有什么方法可以解决此问题?

谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值