如何将outputStream转换为字节数组?

如何将OutputStream转换为字节数组? 我发现首先我需要将此OutputStream转换为ByteArrayOutputStream。 此OutputStream类中只有write()方法,我不知道该怎么做。 有什么想法吗?

创建一个ByteArrayOutputStream

通过调用toByteArray()其内容

参考

你需要做两件事

  • 使用ByteArrayOutputStream写入它
  • 使用toByteArray(),您将获得内容为byte []

你甚至可以像这里提到的那样扩展它

您可以简单地将输出流声明为ByteArrayOutputStream然后使用ByteArrayOutputStream#toByteArray()

如果提供的OutputStream对象不是ByteArrayOutputStream ,则可以wrapwrap在委托类中,该委托类将“抓取”提供给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的调用 – 例如,如果仅需要对字节数组的“转换”。

可以在另一个StackOverflow问题中找到更详细的讨论。