专栏名称: OSC开源社区
OSChina 开源中国 官方微信账号
51好读  ›  专栏  ›  OSC开源社区

aio 系列文档 —— 图解 bytebuffe

OSC开源社区  · 公众号  · 程序员  · 2017-05-03 08:37

正文

# 点击图片报名上海、南京源创会 #


前言


网上关于bytebuffer的文章真的很多,为何在此还要写一篇呢?主要是基于以下几点考虑:

  1. 很多人在使用 t-io 时,还不会bytebuffer,只会照着 t-io 提供的例子照猫画虎,不利于灵活运用

  2. 网上搜到的一些相关文章,讲得不是太易懂,不利于初学者灵活运用bytebuffer

  3. 本文旨在讲解灵活运用bytebuffer所需的最小知识,以帮助用户快速掌握bytebuffer


用极易的方式认识一下bytebuffer


bytebuffer 之第一眼印象

我们可以把bytebuffer理解成如下几个成员组成的一个新对象,对,就是一个普通的java对象,像string一样的java对象。(强调一下,这里只是说这样理解,实际上有些bytebuffer的实现类并非这样实现,并且这里只列出掌握bytebuffer所需要的最小知识集合,其它诸如mark等字段本文并不介绍,以免增加初学者的惑度)

  1. byte[] bytes: 用来存储数据

  2. int capacity: 用来表示bytes的容量,那么可以想像capacity就等于bytes.size(),此值在初始化bytes后,是不可变的。

  3. int limit: 用来表示bytes实际装了多少数据,可以容易想像得到limit

  4. int position: 用来表示在哪个位置开始往bytes写数据或是读数据,此值是可灵活变动的

通过下图,对bytebuffer形成一个感观认识吧

常用操作及各操作对内部变量带来的变化

1、创建bytebuffer: ByteBuffer.allocate(6)

2、写入一个字节: byteBuffer.put((byte)3)

3、读取一个字节: byte bs = byteBuffer.get()

对于刚刚写好的bytebuffer,我们要读取它的内容,需要先设置一下position和limit,否则读的位置就不对。

我们看一下,设置position和limit后,bytebuffer的内部变化

接下来,我们就可以读取刚才写入的数据了







请到「今天看啥」查看全文