先学点英文
Buffers work hand in glove with channels 密切合作,紧密配合之意
1 buffer的几个api flip poistion mark reset rewind ,对于写通讯的编码,解码程序来说相当好用
2 These methods return a reference to the object they were invoked upon (this). This is a class design technique that allows for invocation chaining
buffer.mark().position(5).reset();
类似这种风格的api就叫做invocation chainint
其实hibernate的Criteria 也是这种风格的,基本上在一个对象上需要进行连续操作的都可以用这种风格来写
List cats = sess.createCriteria(Cat.class) .add( Restrictions.in( "name", new String[] { "Fritz", "Izi", "Pk" } ) ) .add( Restrictions.disjunction() .add( Restrictions.isNull("age") ) .add( Restrictions.eq("age", new Integer(0) ) ) .add( Restrictions.eq("age", new Integer(1) ) ) .add( Restrictions.eq("age", new Integer(2) ) ) ) ) .list();
3 在做批量读写的时候,BufferUnderflowException ,BufferOverFlowException两个异常是很常见的
Buffer不是线程安全的,以下这种写法,有潜在的风险
int count = buffer.remaining(); for (int i = 0; i < count, i++) { myByteArray [i] = buffer.get( }
4 duplicate操作,能够得到同一份数据的两套游标,也就是说,我们能做更复杂的事了,这个一定有应用场景的。
5 高低位(BIG_ENDIAN,LITTLE_ENDIAN)的问题,可以用ByteOrder对象来解决
6 DirectBuffer理论上在IO操作上会带来性能提高,但是其真正效率,受环境影响很大,其使用内存开销,不在heap之内。是否带来性能提升,要实测,所以使用这种buffer最好作成开关选项。
7 Memory-Mapped Buffers 能够有用内存映射的方式读写文件,但可能有些细节需要关注,且听下回分解