byte[] 转ByteBuffer出现 no direct ByteBuffer

1.byte[]转ByteBuffer使用wrap方法就可以了,no direct ByteBuffer是什么原因?
一般直接可以转的

ByteBuffer.wrap(bytes)

然而接口接收处要求的也是java.nio.ByteBuffer,这就比较奇怪了。

经过一番研究后,ByeBuffer是一个抽象类,其还有一些其他子类,所以说接口参数要求为ByteBuffer没有问题。

那其实报这个错的原因就是转化后不是一个DirectByteBuffer对象,这是ByteBuffer子类。
因此,需要声明或者申请转化后的对象为DirectByteBuffer,那么:

ByteBuffer bb = ByteBuffer.allocateDirect(bytes.length);  //申请为DirectByteBuffer
bb.wrap(bytes);

这样处理后就可以了。

2.有个比较难理解的概念:
子类可以赋值给父类
父类不能赋值给子类

3.我谈谈自己简单的理解:
首先:子类继承父类,子类有父类所有的属性和方法,但也有自己的属性和方法。这就相当于数学概念中的集合概念,子类是一个集合,父类是此集合的子集甚至是真子集。
那么:
子类给父类赋值就相当于:大集和包含子集
父类给子类赋值就相当于:子集包含大集合,此关系不成立。

或者理解:子类拥有父类的所有属性和方法,可以非常容易赋值。但是父类不包含子类的一些方法,因此它就不能给子类赋值。
当然,这些理解不够准确,欢迎指教。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值