1

У меня есть соединение Bluetooth с устройством, которое отправляет данные в виде массива байтов. Затем массив байтов изменяется на строку с новой строкой (byte [], offset, bytecount). Проблема в том, что данные принимаются сотни и сотни раз, а сборка мусора, похоже, не выполняет свою работу, потому что после примерно 1000 циклов я получаю ошибку выделения байта из памяти. Приложение начинает все больше и больше отставать от увеличения циклов.Android: Слишком много объектов

Есть ли способ, чтобы освободить память нового объекта строки сразу после того, я использую его, или еще лучше, есть ли способ изменить массив байт в строку или даже поплавок без создания нового объект?

Худший случай, есть ли способ предоставить приложение больше памяти, чтобы ошибка произошла намного позже?

+0

Не могли бы вы дать свой код часть с петлей? – Yury

ответ

0

Если вы читаете свои данные в char[] и повторно используете этот массив, когда будете читать больше данных, у вас будет очень небольшой объем памяти.

Кроме того, проверьте эту страницу: http://www.javamex.com/tutorials/memory/string_memory_usage.shtml

+0

Итак, используйте char [] вместо байта [], но как насчет смещения и bytecount? Не имеет значения для char [] для String? – user1233402

+0

Я не думаю, что это важно, если вы используете byte [] или char []. Я действительно думал о InputStreamReader, который может выводиться в char []: http://docs.oracle.com/javase/1.4.2/docs/api/java/io/InputStreamReader.html#read (char [], % 20int,% 20int). Вы указываете счетчик и счетчик байтов. Это то, о чем вы спрашиваете? – Macondo2Seattle

+0

haha ​​Я честно не знаю, как задать свой вопрос. Я получаю сотни байт [], которые мне нужно изменить на строки, чтобы получить полезную информацию, и я хочу сделать это, не создавая новый объект. Используйте InputStreamReader с байтом [] в качестве входных данных и установите смещение и bytecount с чтением (char [], offset, bytecount), чтобы получить мой char []? – user1233402

Смежные вопросы