Повторно используйте байтовины по нескольким BytebufferbackedinptstreamsJAVA

Программисты JAVA общаются здесь
Anonymous
Повторно используйте байтовины по нескольким Bytebufferbackedinptstreams

Сообщение Anonymous »

У меня есть вопрос об использовании повторного использования bytebuffer s из java.nio несколько раз для создания inputstream . Я нашел хороший конвертер в Джексоне под названием ByteBufferbackedInputStream . Однако моя проблема заключается в том, что я хочу потенциально иметь несколько входных одновременно, подкрепленное тем же базовым Bytebuffer . Рассмотрим, < /p>

Код: Выделить всё

    @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

Вернуться в «JAVA»