2012-02-26 96 views
0

我需要一種方法來將字節[]轉換爲字符串而不創建新的字符串對象。字節數組到字符串在Android

我不想要什麼:

String s= new String(byte[], int offset, int byteCount);

是否有另一種方式來達到同樣的事情,而無需創建一個新的String對象?

我一直在尋找Base64類。那樣有用嗎?

+4

你想創建一個String對象而不創建它? :\ – amit 2012-02-26 08:09:01

+0

你爲什麼認爲你需要這個? – 2012-02-26 08:11:00

+0

內存問題。我得到噸和噸字節數組,我需要變成字符串。垃圾收集似乎不能很好地工作,因爲一段時間後我會發現內存異常。 – user1233527 2012-02-26 08:25:46

回答

2

這隻有在某個地方有可能獲得從每個輸入生成的字符串緩存時纔有可能。

字符串是不變的,所以你不能把新的數據到現有串 - 所以,除非你能找到已經有正確的數據(緩存我前面提到的),你會現有字符串必須創建一個新的字符串。

(我也強烈建議您指定編碼要使用的,而不是依靠系統默認編碼的字符。)

當然,如果這不是真正編碼的文本入手(例如,如果byte[]數據來自圖像),那麼無論如何Base64會更合適 - 但是這與您是否需要新字符串是正交的。

+0

但是,你*可以*擁有一個'String'池,並使用反射來改變它們。我同意這可能是一個可怕的解決方案,並可能對jvm造成嚴重破壞。 – amit 2012-02-26 08:11:31

+0

@amit:如果安全管理器允許,您可以在反射時更改它們。我不知道它是否在Android上,我認爲這是一個不好的解決方案,我不會在答案中提到它:) – 2012-02-26 08:12:41

+0

同意。剛纔提到理論上可能 - 對於未來的讀者。如果我認爲它實際上是一種解決方案,那麼我會將其作爲答案發布。 – amit 2012-02-26 08:14:06