Как я могу преобразовать OutputStream в массив байтов? Я обнаружил, что сначала мне нужно преобразовать этот OutputStream в ByteArrayOutputStream. В этом классе OutputStream существует только метод write(), и я не знаю, что делать. Есть идея?
Как преобразовать outputStream в массив байтов?
Ответ 1
Создайте ByteArrayOutputStream
.
Захватите его содержимое, вызвав toByteArray()
Ответ 2
Вам нужно сделать 2 вещи
- Используя ByteArrayOutputStream, напишите ему
- Используя toByteArray(), вы получите содержимое в виде байта []
Вы могли бы даже расширить его, как упомянуто здесь
Ответ 3
Вы можете просто объявить свой выходной поток как ByteArrayOutputStream
затем использовать ByteArrayOutputStream#toByteArray()
.
Ответ 4
Если OutputStream
объект OutputStream
еще не является ByteArrayOutputStream
, его можно wrap
внутри класса делегата, который "захватит" байты, предоставленные методам write()
, например
public class DrainableOutputStream extends FilterOutputStream {
private final ByteArrayOutputStream buffer;
public DrainableOutputStream(OutputStream out) {
super(out);
this.buffer = new ByteArrayOutputStream();
}
@Override
public void write(byte b[]) throws IOException {
this.buffer.write(b);
super.write(b);
}
@Override
public void write(byte b[], int off, int len) throws IOException {
this.buffer.write(b, off, len);
super.write(b, off, len);
}
@Override
public void write(int b) throws IOException {
this.buffer.write(b);
super.write(b);
}
public byte[] toByteArray() {
return this.buffer.toByteArray();
}
}
Чтобы уменьшить накладные расходы, вызовы super
в вышеуказанном классе могут быть опущены - например, если требуется только "преобразование" в массив байтов.
Более подробное обсуждение можно найти в fooobar.com/info/8362901/....