Netty的深入浅出--27.NIO的buffer绝对操作、allocate 方法和只读buffer
之前几章的项目里面基本上使用的是相对操作,现在下面使用一些绝对操作:
我相信你们看了我之前几篇博客之后,到这不能理解只有slice()方法。
创建一个新的buffer,也就是我们通过绝对操作截取出来的那段
判断上面这两个buffer是不是独立的
运行:
结果从2开始到5发生了变化,说明他们两个buffer共享内存。
创建只读buffer:
这里细讲一下allocate
源码中ByteBuffer是一个抽象类,真正的对象创建是通过allocate()方法实现的
打印出各自的类名:
我们会疑惑,那它是怎么只读的呢?
简单来说就是,在你put的时候直接给你抛出异常,如此简单粗暴o(* ̄︶ ̄*)o
我们在ByteBuffer里面找到put方法的重写方法
看见没,直接抛出异常 ,没有多余的操作Σ(⊙▽⊙"!
其实不只是它,很多只读方法都是采取这种方式抛出异常的
注意:
还得说明一点,只读buffer和源buffer共享的是通过一个buffer ,当源buffer改变的时候只读buffer的内容也会发现改变。