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