如何将输出流中的数据放入字节缓冲器中?
2022-09-02 00:08:13
在Java中,我需要将OutputStream中的内容(我自己将数据填充到该流中)放入ByteBuffer中。如何以简单的方式做到这一点?
在Java中,我需要将OutputStream中的内容(我自己将数据填充到该流中)放入ByteBuffer中。如何以简单的方式做到这一点?
您可以创建并写入它,并将内容提取为 using .然后将创建一个具有输出字节数组内容的字节。ByteArrayOutputStream
byte[]
toByteArray()
ByteBuffer.wrap(byte [])
ByteBuffer
@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());
因此,一旦写入了所有输出,相同的缓冲区将用作输入流的基础。