java nio为什么要定义byteBuffer?

nio里面为什么要重新定义字节的缓冲区呢?以前用byte[]数组,我感觉也可以啊。我有一个想法,如果要定义一个接口读某一类数据,实现类可以是阻塞和非阻塞的,而他们统一返回byte[]数组,这样是一个好的设计吗?

阅读 5.6k
2 个回答

Java的数组是线性表,长度是固定的。很显然作为网络数据流来说,使用“链表”的结构更合适,因此使用Buffer而不是数组。因为数据流是不断追加的,用数组不合适

因为NIO中,缓冲区不单单可以是Java堆中的字节数组byte[],还可以是堆外内存,也就是DirectByteBuffer,很多场景使用堆外内存会减少一次内存拷贝,有更高的性能。这两种通过ByteBuffer这一层做了统一的抽象。你可以看看ByteBuffer的实现类就知道了

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