记java.nio.ByteBuffer的简单使用:放入字节、读取有效字节

目标

一个个字节写入,满足条件后取出、清空准备写入下一个字节。

控制逻辑

不断的从外部读取字节放入缓存,每收到回车换行则完成一帧,从缓存剥离出来交付给下一个方法解析。

代码块

private ByteBuffer byteBuffer = ByteBuffer.allocate(300);//注意这里根据自己的需要预估大小
private byte b0d = (byte)0x0d,b0a = (byte)0x0a;//回车、换行字节,可以不需要我这样而直接写在代码里
private void doWithBytes(byte[] bytes){
  for(byte b: bytes){
    if (byteBuffer.position() > 0 && byteBuffer.get(byteBuffer.position() - 1) == b0d && b == b0a) {
                Log.d(tag, "收到一帧的结尾了");
                byteBuffer.put(b);
                byte[] buf = new byte[byteBuffer.position()];//获得有效字节用的容器
                byteBuffer.flip();//设置为可读取
                byteBuffer.get(buf);//读取到有效字节
                doWithSignal(buf);//交给下一个方法处理一帧
                byteBuffer.clear();//清空缓冲区准备接收下一帧
            } else {
                byteBuffer.put(b);
            }
  }
}

小结

1,合理设置缓冲大小
2,没有方法进行剔除无效字节,也没有方法直接读取有效字节,只能通过position知道有效字节的截至位置,然后自行读取
3,get前要flip
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值