在java原来面向流的io中,即便是使用到缓冲区,也是由缓冲流类封装了缓冲区,负责在内部维护缓冲区,然后直接向用户提供读取需要数据的方法
为什么在nio中要将buffer和channel独立开来?channel不能直接读写字符串等数据,而只能与buffer交互,为什么不将buffer直接封装到channel中?这样不是用起来更加方便吗?
目前我能想到的,似乎这样做读写可以共用一个缓冲区,而不是像原io中读写流各自维护一个缓冲区,需要来回转移数据,但是似乎说不过去,因为实际使用中,我们不可能理想的只在读数据到缓冲区,然后在缓冲区上直接加工完,再写出,而是将数据从缓冲区拿出到String中,处理完再复制回缓冲区,这并没有什么进步感觉
大家讨论一下,这样独立开来究竟有什么优势呢?

解决方案 »

  1.   

    首先设计都是为了低耦合高内聚。你把存储和控制类放在一个对象里不符合MVC精神啊。
      

  2.   

    低耦合是说的两个组件之间尽量减少相互依赖
    这根我说的不是一回事啊
    你完全还可以继续分离buffer和channel,但是你可以将buffer的使用隐藏在channel之中,让buffer对用户来说透明
    这样并不是说buffer和channel就高耦合了,实际上channel还是像原来一样的去使用buffer,只不过是把原来需要用户来显示的对buffer做的一些操作(比如转换出字符串对象)封装到channel中,并提供一个简单的方法,这样不是更方便么。。
      

  3.   

    类之间也是低耦合的,工厂模式就是为了降低类之间的低耦合,而不是把所有类的生产都放在需要使用他的类里面。或者说框架spring为什么要用注入式,也是让类之间的调用不要通过内嵌的方式。