Существует более эффективный вариант ответа @ DJClayworth.
Как правильно заметил @seh, ByteArrayOutputStream.toByteArray()
возвращает копию объекта поддержки byte[]
, что может быть неэффективно. Однако поддерживающий объект byte[]
и количество байтов являются защищенными членами класса ByteArrayOutputStream
. Следовательно, вы можете создать свой собственный вариант ByteArrayOutputStream, выставляя их напрямую:
public class MyByteArrayOutputStream extends ByteArrayOutputStream {
public MyByteArrayOutputStream() {
}
public MyByteArrayOutputStream(int size) {
super(size);
}
public int getCount() {
return count;
}
public byte[] getBuf() {
return buf;
}
}
Использовать этот класс просто:
MyByteArrayOutputStream out = new MyByteArrayOutputStream();
fillTheOutputStream(out);
return new ByteArrayInputStream(out.getBuf(), 0, out.getCount());
В результате, после записи всех выходных данных один и тот же буфер используется в качестве основы входного потока.