2010-07-27 7 views
2

Я работаю над программой, где я сжимаю большое количество информации и сохраняю ее в байтах в буфере. Я не могу использовать ByteBuffer, потому что я не знаю размер финала.Infinite ByteBuffer в Java

Что было бы лучшим способом реализовать это?

ответ

12

Как насчет ByteArrayOutputStream? Конечно, это не совсем удобно, но он будет делать то, что вы хотите. Когда вы закончите сбор байтов, вы можете просто вытащить массив байтов.

+0

Имеет смысл для меня, поскольку Java представляет собой сжатие как потоков ввода/вывода в любом случае. –

+0

Идеальное решение! – Skuge

+0

Этот метод имеет ограничение 2 ГБ (только для уточнения) –

2

Вы должны хранить большие объемы информации в файле или в базе данных, а не в памяти. Рано или поздно у вас закончится память.

1

Вы можете использовать Apache MINA IOBuffer, однако его алгоритм изменения размера довольно дорогой.

То, что я делаю, это использование прямого байтового буфера, вам не нужно знать, насколько он будет велик, поскольку неиспользуемое пространство потребляет виртуальную память, а не кучу или даже основную память. На 64-битной машине виртуальная память очень дешевая.

Вы знаете, что конечный размер не будет намного больше, чем оригинал.