nio里面为什么要重新定义字节的缓冲区呢?以前用byte[]数组,我感觉也可以啊。我有一个想法,如果要定义一个接口读某一类数据,实现类可以是阻塞和非阻塞的,而他们统一返回byte[]数组,这样是一个好的设计吗?
nio里面为什么要重新定义字节的缓冲区呢?以前用byte[]数组,我感觉也可以啊。我有一个想法,如果要定义一个接口读某一类数据,实现类可以是阻塞和非阻塞的,而他们统一返回byte[]数组,这样是一个好的设计吗?
因为NIO中,缓冲区不单单可以是Java堆中的字节数组byte[]
,还可以是堆外内存,也就是DirectByteBuffer,很多场景使用堆外内存会减少一次内存拷贝,有更高的性能。这两种通过ByteBuffer这一层做了统一的抽象。你可以看看ByteBuffer的实现类就知道了
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
Java的数组是线性表,长度是固定的。很显然作为网络数据流来说,使用“链表”的结构更合适,因此使用Buffer而不是数组。因为数据流是不断追加的,用数组不合适