如何将 OutputStream 中的数据放入 ByteBuffer?

新手上路,请多包涵

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

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

阅读 775
2 个回答

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

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

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

正如@seh 正确注意到的那样, ByteArrayOutputStream.toByteArray() 返回支持对象的 副本 byte[] 对象,这可能效率低下。但是,支持 byte[] 对象以及字节数都是 ByteArrayOutputStream 类的受保护成员。因此,您可以创建自己的 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());

结果,一旦所有输出都被写入,同一个缓冲区就被用作输入流的基础。

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

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