【问题标题】:Using channels to pass data from outputStream to bytebuffer使用通道将数据从 outputStream 传递到 bytebuffer
【发布时间】:2014-03-30 16:52:46
【问题描述】:

有没有办法将数据写入连接到通道的 OutputStream 对象,并且该通道会将数据传递到字节缓冲区(最好是直接字节缓冲区)?

我有一种情况,第三方函数可以将其输出写入 outputStream。我希望能够使用通道将此数据写入字节缓冲区。

有可能吗?

谢谢

【问题讨论】:

  • 您能发布您的频道代码吗?
  • 我还没有任何频道。我打算添加一个能够读取写入 outputStream 的数据并将其传递给 byteBuffer
  • 那你真的只需要ByteBuffer 而不是频道,对吧?

标签: java nio channel bytebuffer channels


【解决方案1】:

您可以轻松地创建一个extends OutputStream 的类,因为这只需要实现一个 方法。未经测试的示例代码:

public final class ByteBufferOutputStream
    extends OutputStream
{
    private final ByteBuffer buf;

    public ByteBufferOutputStream(final int size)
    {
        buf = ByteBuffer.allocateDirect(size);
    }

    @Override
    public void write(final int b)
        throws IOException
    {
        if (buf.remaining() == 0)
            throw new IOException("buffer is full");
        buf.put((byte) (b & 0xff));
    }
}

然后只需将该类的一个实例传递给您的 API。您可能还想覆盖其他 write 方法,因为 ByteBuffer 具有写入字节数组的专用方法。

【讨论】:

  • 感谢您的回答。看起来该函数将在每次调用时写入一个字节。知道如何提高此功能的效率吗?
  • 好吧,在代码之后,我添加了更多文本:您可以覆盖 other .write() 方法
猜你喜欢
  • 1970-01-01
  • 2010-10-26
  • 2018-06-17
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
相关资源
最近更新 更多