NIO-Buffer

198 阅读1分钟

众所周知niobuffer是核心的部分。看过视频也看过一些博客,我记录一下我的理解。

buffer是一块内存,可以是onheap也可以是堆外。里面有三个核心的概念

  • position
  • capacity
  • limit

还有几个api操作如下

  • clear
  • compcat
  • flip

如何理解buffer

  • buffer是什么,来看源码注释
A buffer is a linear, finite sequence of elements of a specific primitive type.
  • buffer内部其实就是数组。
  • 让你来设计能过支持读和写的buffer如何设计?
  • 想明白了之后再看看nio的buffer,😯原来就是个这啊,其实就是看你对数组的理解怎么样了
  • 写一段java代码,打上断点,很容易观察到buffer怎么一回事儿。核心的三个概念很直观就能看到是多少。我这个代码演示的是compact操作,了解了position capacity limit的概念,然后通过debug学习。

关于读和写

有人说什么写模式什么读模式。我感觉这样更容易误导

  • 首先从源码注释中没有看提到什么读模式转写模式,写模式转读模式一说
  • 一个buffer capcity是10,你写到了5,然后get也没毛病呀,只是没拿到东西。其实是不符合需求的,我只写到了5,你就去拿6这样应该抛异常才对。
  • 所以有了flip操作。这个操作会position为0,limit变为刚才写到的地方。这样你读就只能读写过的内容,读超了抛异常。
  • 读完了之后,由于limit的限制,需要将limit=position才合理,所以有了clear操作。

总结

数据结构和算法是基本功,我相信你行😯