如何将outputStream转换为字节数组?
如何将OutputStream转换为字节数组? 我发现首先我需要将此OutputStream转换为ByteArrayOutputStream。 此OutputStream类中只有write()方法,我不知道该怎么做。 有什么想法吗?
创建一个ByteArrayOutputStream
。
通过调用toByteArray()
其内容
参考
你需要做两件事
- 使用ByteArrayOutputStream写入它
- 使用toByteArray(),您将获得内容为byte []
你甚至可以像这里提到的那样扩展它
您可以简单地将输出流声明为ByteArrayOutputStream
然后使用ByteArrayOutputStream#toByteArray()
。
如果提供的OutputStream
对象不是ByteArrayOutputStream
,则可以wrap
其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问题中找到更详细的讨论。