2014-02-05 42 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