2014-02-05 43 views
0

我在看的源代码Volley,一个java联网机器人库,并且它使用构造new String(byte[], String)是字符串(字节[],字符集)存储器高效

把整个网络响应转换成一个新的字符串对象

其中大部分网络响应为byte[],并且标头被解析为字符串。

正在创建一个大字符串这种方式的内存效率?我见过InputStream在一个while循环中被转换为String的网络调用,并且它可以在应用程序内存不足时崩溃应用程序。

+0

一个字符串需要尽可能多的存储空间。你大概已经得到了'byte []'数组和字符串字面值来标识字符集,所以没有其他的东西。 (你认为会发生什么?)(最糟糕的是通过反复附加小块来创建一个字符串,这可以运行垃圾收集器不规则。) –

+0

'一个字符串需要尽可能多的存储空间作为一个字符串。如果没有足够的顺序存储器可用,它是否可以单独适应这种情况? – CQM

+0

您的回复不是兆字节长,是吗?如果只有几KB,那么字符串也只有几KB。 –

回答

1

你不说什么比较高效,所以你的问题并没有真正的答案,但总的来说我同意你的看法。标题之后的响应主体应作为输入流提供。毕竟它可能会无限长。将整个请求或响应(或文件)读入内存是不好的做法,并且不是通过多种措施“有效”,例如内存使用和延迟。

+0

这是一条评论。它没有回答这个问题:“是否使用'new String(byte [],String)'创建一个大的字符串'高效?”相反,它回答了一个没有问到的问题,即“接受大量数据传输并将其转换为单个字符串是明智的,而不是将其逐个写入磁盘或以其他方式将其部分处理?” –

+0

@HotLicks我的最后一句话回答了这个问题,但我已经修改它以使其更清楚。 – EJP