Записать DataOutputStream в ByteArray / ByteBuffer с "динамическим" размером?
Я спрашиваю себя, есть ли хорошее решение для получения данных через TCP и чтения данных в DataInputStream и хранения данных в байтовом массиве "динамического" размера. Я подумал о некоторых решениях, таких как запись в буферы и, наконец, сохранить его в созданном массиве размером с пакет, который я получил.
Вот пример: данные, которые я получаю через TCP (байт за байтом), имеют размер n*13 байт, а конец пакета составляет 13 байтов нулей (13 байтов нулей уникальны, ранее их не было в данных). Следующий пакет - это m*13 байт + 13 байт нулей и так далее. Поэтому я хочу прослушать поток и сохранить, например, n*13 байт в байтовом массиве без нулей (я не знаю размер одного набора данных раньше).
Можете ли вы сказать мне, как сделать это тонким способом?
Заранее спасибо!
Крис
1 ответ
Я бы прочитал данные прямо в прямой ByteBuffer. Вам также не нужен DataInputStream. Я бы использовал ByteBuffer больше необходимого, например, 1 МБ или 10 МБ, и использовал бы тот факт, что неиспользуемые прямые буферы (например, неиспользуемая собственная память) используют только виртуальную память, а не реальную память. Я бы позаботился о том, чтобы этот буфер использовался как можно чаще, в идеале, для жизненного цикла приложения.
В 64-битной среде вы можете сделать буферы действительно большими. например, 1 ГБ без особого влияния.
Если вы хотите минимизировать потребление памяти, я бы обработал данные по мере их поступления. Таким образом вы избежите необходимости хранить его первым. Похоже, что минимальный размер составляет 13 байтов и будет иметь разумный размер буфера, как 512 байтов или 2 КБ.