Netty 如何有效地从ByteBuf获取短数组?

Netty 如何有效地从ByteBuf获取短数组?,netty,Netty,使用java.nio.ByteBuffer时,我的代码如下: ByteBuffer buffer = ... ShortBuffer shortBuffer = buffer.asShortBuffer(); short[] shortArray = new short[shortBuffer .remaining()]; shortBuffer.get(shortArray); Unpooled.buffer(...).nioBuffer().asShortBuffer().put(shor

使用
java.nio.ByteBuffer
时,我的代码如下:

ByteBuffer buffer = ...
ShortBuffer shortBuffer = buffer.asShortBuffer();
short[] shortArray = new short[shortBuffer .remaining()];
shortBuffer.get(shortArray);
Unpooled.buffer(...).nioBuffer().asShortBuffer().put(shortArray);
现在使用netty 4,如何有效地从
ByteBuf
获取短数组? 或者我只是先使用
bytebuff.nioBuffer()
来获取
ByteBuffer

还有,如何有效地将短数组放入
ByteBuf
?我可以这样编写代码吗:

ByteBuffer buffer = ...
ShortBuffer shortBuffer = buffer.asShortBuffer();
short[] shortArray = new short[shortBuffer .remaining()];
shortBuffer.get(shortArray);
Unpooled.buffer(...).nioBuffer().asShortBuffer().put(shortArray);

Netty没有很好的机制从
ByteBuf
中提取
Short[]
。您可以使用一个复合解决方案来检测后端类型,并使用不同的方法来处理此后端,然后返回到基础阵列的简单复制

NioBuffer
案例很简单,它有一个简单的
get()
操作来读取生成的短数组

直接和基于数组的情况比较困难,这些情况要求我们在循环中调用
readShort()
,直到填充生成的数组

生成的代码如下所示:

ByteBuf buf=。。。;
短[]结果;
如果(buf.readableBytes()%2!=0){
抛出新的IllegalArgumentException();
}
结果=新的短[buf.readableBytes()/2];
如果(buf.nioBufferCount()>0){
buf.nioBuffer().asShortBuffer().get(结果);
}否则{
for(int i=0;i