Бесконечный байтовый буфер в Java

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

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


person Skuge    schedule 27.07.2010    source источник


Ответы (3)


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

person Pointy    schedule 27.07.2010
comment
Для меня это имеет смысл, поскольку Java в любом случае представляет сжатие как потоки ввода/вывода. - person Licky Lindsay; 27.07.2010
comment
Этот метод имеет ограничение в 2 ГБ (просто для уточнения) - person Riyad Kalla; 14.02.2012
comment
А когда вы вызываете ByteArrayOutputStream#toByteArray, поток вызывает Arrays.copyOf, что может привести к OutOfMemoryError - person Dennis Gloss; 27.08.2019

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

person user207421    schedule 28.07.2010

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

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

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

person Peter Lawrey    schedule 28.07.2010