星球狂想战队|深度解读Netty:NIO那些不为人知的秘密( 四 )
Buffer在java.nio中被定义为抽象类:
Buffer中有4个非常重要的属性:capacity、limit、position、mark
0?mark?position?limit?capacity
现在应该很清晰这几个属性的关系了~
Buffer常见操作
创建Buffer
allocate(intcapacity)ByteBufferbuffer=ByteBuffer.allocate(1024);intcount=channel.read(buffer);例子中创建的ByteBuffer是基于堆内存的一个对象 。
wrap(array)wrap方法可以将数组包装成一个Buffer对象:
ByteBufferbuffer=ByteBuffer.wrap("helloworld".getBytes());channel.write(buffer);allocateDirect(intcapacity)通过allocateDirect方法也可以快速实例化一个Buffer对象 , 和allocate很相似 , 这里区别的是allocateDirect创建的是基于堆外内存的对象 。
堆外内存不在JVM堆上 , 不受GC的管理 。 堆外内存进行一些底层系统的IO操作时 , 效率会更高 。
Buffer写操作
Buffer写入可以通过put()和channel.read(buffer)两种方式写入 。
通常我们NIO的读操作的时候 , 都是从Channel中读取数据写入Buffer , 这个对应的是Buffer的写操作 。
Buffer读操作
Buffer读取可以通过get()和channel.write(buffer)两种方式读入 。
还是同上 , 我们对Buffer的读入操作 , 反过来说就是对Channel的写操作 。 读取Buffer中的数据然后写入Channel中 。
- 游戏小怪兽|达仁星球:最新抖音直播留人控场方法和技巧
- 巅峰战队|VERTIX户外手表,勇攀新高峰——COROS
- 星球狂想战队|世界科技格局
- 家族战队|10年后退化成了“简陋版”,快看丨腾讯微博将于9月28日停服
- 路人战队|失去苹果的代价,有300万人承担不起,请别口嗨“抵制苹果”了
- 家族战队|就读懂了湖南互联网产业,读懂了这些话
- 路人战队|雷军用了什么法宝?,超越格力?新型洗烘一体机实现“弯道超车”
- NASA|NASA发现“黄金星球”,价值超万万亿美元,美国已准备前往
- 天文在线|既有大气又有水 宝藏星球土卫六,宇宙中的超级泰坦
- 通天战队|别人偷动你手机,屏幕就会一戳一个洞,只有你可以打开,教你一招