Код: Выделить всё
@Test
void testStuff() throws Exception {
ByteBuffer bb = ByteBuffer.allocateDirect(42);
for (int i = 0; i < 42; i++) {
bb.put((byte) i);
}
bb.flip();
InputStream foo = new ByteBufferBackedInputStream(bb);
InputStream bar = new ByteBufferBackedInputStream(bb);
byte[] eightyFourBytes = new byte[84];
int readFromFoo = foo.read(eightyFourBytes);
int readFromBar = bar.read(eightyFourBytes);
assertThat(readFromFoo).isEqualTo(42);
assertThat(readFromBar).isEqualTo(42); // oops! reading mutated the underlying ByteBuffer's position
}
< /code>
Я царапаю голову, чтобы выработать решение для этого. Мне это нужно, потому что, < /p>
[*] Я использую и объединяю прямые байтбофтеры < /code> для лучшего файла io производительности (что его использование довольно выброшено для файла Ио также важен), и для снижения давления GC,
[*] Я в других местах, призывающих к интерфейсу, который принимает inputstream У моего приложения были проблемы с использованием памяти, поэтому я не хочу отбирать буфер < /li>
< /ul>
Я думаю, мой вопрос, есть ли есть ли есть Альтернатива Bytebuffer или лучшего способа его использования, чем я? Очевидно, я мог бы просто вручную сбросить буфер между использованиями, но это кажется хрупким, и, на мой взгляд, идеальное решение может создать InputStream s, которые я могу снять, не задумываясь об этом.
Подробнее здесь: https://stackoverflow.com/questions/794 ... putstreams