РЕДАКТИРОВАТЬ:
Выделение байта [] намного быстрее, чем чтение из файла или
сокет, я был бы удивлен, это будет иметь большое значение, если вы
есть система, где микросекунды стоят денег.
Время чтения файла размером 64 КБ составляет около 10 мс (если
файл находится в памяти)
Время, выделяемое для байта размером 64 КБ [], составляет около 0,001 мс,
возможно быстрее.
Вы можете использовать IOBuffer в Apache IO, однако это очень дорого расширяется.
Вы также можете использовать ByteBuffer, position()
сообщит вам, сколько данных было прочитано.
Если вы не знаете, насколько большим будет буфер, и у вас есть 64-битная JVM, вы можете создать большой прямой буфер. Это будет выделять память (постранично) только при использовании. В результате вы можете выделить 1 ГБ, но можете использовать только 4 КБ, если это все, что вам нужно. Прямой буфер не поддерживает array()
, однако вам придется читать из ByteBuffer, используя другие методы.
Другим решением является использование AtomicReference<byte[]>
, вызываемый метод может увеличивать размер по мере необходимости, но если он будет достаточно большим, он будет использовать предыдущий буфер.