2012-02-26 28 views
1

我有一個藍牙連接到設備,以字節數組的形式發送數據。然後將字節數組更改爲具有新的String(byte [],offset,bytecount)的字符串。問題是數據被接收了數百次和數百次,並且垃圾收集似乎並沒有完成它的工作,因爲在大約1000次循環之後,我得到了內存不足的字節分配錯誤。隨着循環的增加,應用程序開始越來越滯後。Android:太多的對象

是否有一個來釋放新的字符串對象的內存之後我使用它,或者更好的辦法,是有辦法的字節數組改變爲字符串甚至浮動而無需創建一個新的目的?

更糟糕的是,有沒有辦法給應用程序更多的內存,以便錯誤發生得多?

+0

你可以給你的代碼部分的循環? – Yury 2012-02-26 12:14:45

回答

0

如果您將數據讀入char[],並且在您讀取更多數據時重新使用該數組,您將擁有非常小的內存佔用空間。

此外,請查看此頁面:http://www.javamex.com/tutorials/memory/string_memory_usage.shtml

+0

因此,使用char []而不是byte [],但偏移量和bytecount怎麼樣?對char []來說String沒關係嗎? – user1233402 2012-02-26 05:51:07

+0

如果你使用byte []或char [],我認爲它不重要。我實際上在考慮InputStreamReader,它可以輸出到char []中:http://docs.oracle.com/javase/1.4.2/docs/api/java/io/InputStreamReader.html#read(char [], %20int,%20int)。您可以在那裏指定偏移量和字節數。你在問什麼? – Macondo2Seattle 2012-02-26 06:00:32

+0

哈哈我真的不知道如何問我的問題。我得到了數百個字節[],我需要將其更改爲字符串以獲取有用信息,並且我希望在不創建新對象的情況下執行此操作。使用InputStreamReader和byte []作爲輸入,並使用read(char [],offset,bytecount)設置offset和bytecount來獲取我的char []? – user1233402 2012-02-26 06:18:36