Я работаю над программой, в которой я сжимаю большой объем информации и сохраняю ее в байтах в буфере. Я не могу использовать ByteBuffer
, потому что не знаю окончательный размер.
Что было бы лучшим способом реализовать это?
Я работаю над программой, в которой я сжимаю большой объем информации и сохраняю ее в байтах в буфере. Я не могу использовать ByteBuffer
, потому что не знаю окончательный размер.
Что было бы лучшим способом реализовать это?
Как насчет ByteArrayOutputStream
? Конечно, это не так удобно, но то, что вы хотите, будет. Когда вы закончите собирать байты, вы можете просто вывести массив байтов.
ByteArrayOutputStream#toByteArray
, поток вызывает Arrays.copyOf
, что может привести к OutOfMemoryError
- person Dennis Gloss; 27.08.2019
Вы должны хранить большие объемы информации в файле или базе данных, а не в памяти. Рано или поздно у вас закончится память.
Вы можете использовать Apache MINA IOBuffer однако его алгоритм изменения размера довольно дорог.
Что я делаю, так это использую прямой буфер байтов, вам не нужно знать, насколько большим он будет, так как неиспользуемое пространство занимает виртуальную память, а не кучу или даже основную память. На 64-битной машине виртуальная память стоит очень дешево.
Вы знаете, что окончательный размер не будет намного больше, чем оригинал.