在java原来面向流的io中,即便是使用到缓冲区,也是由缓冲流类封装了缓冲区,负责在内部维护缓冲区,然后直接向用户提供读取需要数据的方法
为什么在nio中要将buffer和channel独立开来?channel不能直接读写字符串等数据,而只能与buffer交互,为什么不将buffer直接封装到channel中?这样不是用起来更加方便吗?
目前我能想到的,似乎这样做读写可以共用一个缓冲区,而不是像原io中读写流各自维护一个缓冲区,需要来回转移数据,但是似乎说不过去,因为实际使用中,我们不可能理想的只在读数据到缓冲区,然后在缓冲区上直接加工完,再写出,而是将数据从缓冲区拿出到String中,处理完再复制回缓冲区,这并没有什么进步感觉
大家讨论一下,这样独立开来究竟有什么优势呢?
为什么在nio中要将buffer和channel独立开来?channel不能直接读写字符串等数据,而只能与buffer交互,为什么不将buffer直接封装到channel中?这样不是用起来更加方便吗?
目前我能想到的,似乎这样做读写可以共用一个缓冲区,而不是像原io中读写流各自维护一个缓冲区,需要来回转移数据,但是似乎说不过去,因为实际使用中,我们不可能理想的只在读数据到缓冲区,然后在缓冲区上直接加工完,再写出,而是将数据从缓冲区拿出到String中,处理完再复制回缓冲区,这并没有什么进步感觉
大家讨论一下,这样独立开来究竟有什么优势呢?
这根我说的不是一回事啊
你完全还可以继续分离buffer和channel,但是你可以将buffer的使用隐藏在channel之中,让buffer对用户来说透明
这样并不是说buffer和channel就高耦合了,实际上channel还是像原来一样的去使用buffer,只不过是把原来需要用户来显示的对buffer做的一些操作(比如转换出字符串对象)封装到channel中,并提供一个简单的方法,这样不是更方便么。。