如何将输出流中的数据放入字节缓冲器中?

2022-09-02 00:08:13

在Java中,我需要将OutputStream中的内容(我自己将数据填充到该流中)放入ByteBuffer中。如何以简单的方式做到这一点?


答案 1

您可以创建并写入它,并将内容提取为 using .然后将创建一个具有输出字节数组内容的字节。ByteArrayOutputStreambyte[]toByteArray()ByteBuffer.wrap(byte [])ByteBuffer


答案 2

@DJClayworth的答案有一种更有效的变体。

正如@seh正确注意到的那样,返回支持对象的副本,这可能效率低下。但是,支持对象和字节计数都是该类的受保护成员。因此,您可以创建自己的ByteArrayOutputStream变体,直接公开它们:ByteArrayOutputStream.toByteArray()byte[]byte[]ByteArrayOutputStream

public class MyByteArrayOutputStream extends ByteArrayOutputStream {
  public MyByteArrayOutputStream() {
  }

  public MyByteArrayOutputStream(int size) {
    super(size);
  }

  public int getCount() {
    return count;
  }

  public byte[] getBuf() {
    return buf;
  }
}

使用此类非常简单:

MyByteArrayOutputStream out = new MyByteArrayOutputStream();
fillTheOutputStream(out);
return new ByteArrayInputStream(out.getBuf(), 0, out.getCount());

因此,一旦写入了所有输出,相同的缓冲区将用作输入流的基础。


推荐