JAVA NIO 读书笔记 第二章 buffer

先学点英文

 

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 能够有用内存映射的方式读写文件,但可能有些细节需要关注,且听下回分解

 

 

 

你可能感兴趣的:(java,Hibernate,读书)