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

新手上路,请多包涵

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

原文由 hellzone 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 4.1k
2 个回答

创建一个 ByteArrayOutputStream

通过调用 toByteArray() 其内容

ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.writeTo(myOutputStream);
baos.toByteArray();

参考

原文由 washcloth 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果提供的 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 的调用——例如,如果只需要“转换”为字节数组。

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

原文由 PNS 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题