为啥 netty 要重新写自己的 buffer 以及 channel
就是因为jdk的bytebuffer和channel用起来不方便咯,比如buffer只有一个position指针,每次写完还要flip一下才能读,而netty的有readerindex和writerindex,用起来更方便了
■网友
nio的ByteBuffer使用不方便,容易犯错。写和读共用一个index,经常容易犯的错误是写完在读的时候忘记flip。更详细的可以看netty文档http://docs.jboss.org/netty/3.2/guide/html/architecture.html chapter 2.1以及http://docs.jboss.org/netty/3.2/api/org/jboss/netty/buffer/package-summary.html#package_description
■网友
因为java原生bytebuffer和channel功能单一,封装是为了更易用,称buffer重写,channel封装更合适一些,另外推荐一款io框架,目前还处于试验阶段,很快会发布release版本,个人觉得用起来比netty,mina顺手,欢迎star;
FireNio/firenio
■网友
提供更高层次的封装,提供更为丰富的功能比如Netty的Buffer可以让我们方便的将两个小Buffer合并为一个大Buffer而不需要进行byte的复制Netty的Channel只是把新的和老的IO进行了更高层的封装,让大家写程序更简单而已
■网友
看了下其它回答基本都是针对一两个点, Netty in Action上的比较全面些:
These are some of the advantages of the ByteBuf API:
■ It’s extensible to user-defined buffer types.
■ Transparent zero-copy is achieved by a built-in composite buffer type.
■ Capacity is expanded on demand (as with the JDK StringBuilder).
■ Switching between reader and writer modes doesn’t require calling ByteBuffer’s
flip() method.
■ Reading and writing employ distinct indices.
■ Method chaining is supported.
■ Reference counting is supported.
■ Pooling is supported.
每点要仔细解释的话比较长, 有空的话再补. 可以去找一本看看先.
■网友
提一个内存管理的。
【为啥 netty 要重新写自己的 buffer 以及 channel 】 Bytebuffer 使用的是堆外内存,也就是不依赖 JRE 进行 GC。Netty 自己实现了 Bytebuffer 的内存管理。
推荐阅读
- 有必要重新开个C店吗
- 宝马1系|重新启用“ti”标识 宝马128ti正式公布售价
- 为啥看到书柜上的藏书会有心旷神怡的感觉
- 为啥知乎上普便有一种【我在北上广深打工,所以拥有更好的视野】这样的错觉
- 为啥工商银行的用户体验如此之差
- 汽车|看了中消协4S店服务测评调查结果,终于知道法系车为啥卖不好了
- 你为啥从窝窝商城离职?
- 为啥5G和2.4G默认的BSSID是相同的
- 为啥电器实体店的价格比淘宝贵那么多
- 现在在线学习视频有很多了,为啥大部分人还是喜欢下载下来观看
