Подтвердить что ты не робот

Как преобразовать outputStream в массив байтов?

Как я могу преобразовать OutputStream в массив байтов? Я обнаружил, что сначала мне нужно преобразовать этот OutputStream в ByteArrayOutputStream. В этом классе OutputStream существует только метод write(), и я не знаю, что делать. Есть идея?

4b9b3361

Ответ 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/....