JAVA NIO 之ByteBuffer的mark、position、limit、flip、reset,get方法介绍
参考博客:http://blog.csdn.net/sunzhenhua0608/article/details/31778519
先来一个demo:
import java.nio.ByteBuffer;
public class ByteBufferDemo {
public static void main(String[] args){
String str = "helloWorld";
ByteBuffer buff = ByteBuffer.wrap(str.getBytes());
System.out.println("position:"+buff.position()+"\t limit:"+buff.limit());
//读取两个字节
byte[] abytes = new byte[1];
buff.get(abytes);
System.out.println("get one byte to string:" + new String(abytes));
//Reads the byte at this buffer's current position, and then increments the position.
buff.get();
System.out.println("获取两个字节(两次get()方法调用)后");
System.out.println("position:"+buff.position()+"\t limit:"+buff.limit());
//Sets this buffer's mark at its position. like ByteBuffer.this.mark=position
buff.mark();
System.out.println("mark()...");
System.out.println("position:"+buff.position()+"\t limit:"+buff.limit());
//当读取到码流后,进行解码。首先对ByteBuffer进行flip操作,
//它的作用是将缓冲区当前的limit设置为position,position设置为0
//flip方法将Buffer从写模式切换到读模式。调用flip()方法会将position设回0,并将limit设置成之前position的值。
// 这里的flip()方法,在详细的描述一下,其事这里是理解position和limit这两个属性的关键。
//用于后续对缓冲区的读取操作。然后根据缓冲区可读的字节个数创建字节数组,
//调用ByteBuffer的get操作将缓冲区可读的字节(获取position到limit的字节)
//数组复制到新创建的字节数组中,最后调用字符串的构造函数创建请求消息体并打印。
buff.flip();
System.out.println("flip()...");
System.out.println("position:"+buff.position()+"\t limit:"+buff.limit());
byte[] tbyte = new byte[1];
buff.get(tbyte);
System.out.println("get one byte to string:" + new String(tbyte));
System.out.println("position:"+buff.position()+"\t limit:"+buff.limit());
//BufferUnderflowException 测试
// byte[] trbyte = new byte[2];
// buff.get(trbyte);
}
}
输出:

JAVA NIO 之ByteBuffer的mark、position、limit、flip、reset,get方法介绍的更多相关文章
- 关于 java,nio,bufferedreader,bytebuffer
有没有一种方法来读取的ByteBuffer有一个BufferedReader,而无需将其转换为String优先?我想读通过一个相当大的 ByteBuffer作为文本行和我想避免它写入磁盘性能方面的原因 ...
- java nio通过ByteBuffer输出文件信息
1.通过ByteBuffer的get()方法每次读取一个字节转换成char类型输出. fc = new FileInputStream("src/demo20/data.txt") ...
- Java NIO ByteBuffer 的使用与源码研究
一.结论 ByteBuffer 是Java NIO体系中的基础类,所有与Channel进行数据交互操作的都是以ByteBuffer作为数据的载体(即缓冲区).ByteBuffer的底层是byte数组, ...
- 《精通并发与Netty》学习笔记(15 - 详解NIO中Buffer之position,limit,capacity)
一.前言熟悉NIO的人想必一定不会陌生buffer中position,limit,capacity这三个属性吧,之前在学习的时候遇到一个问题:就是当你先往缓冲区写入一部分数据,然后调用flip()方法 ...
- JAVA NIO缓冲区(Buffer)------ByteBuffer常用方法
参考:https://blog.csdn.net/xialong_927/article/details/81044759 缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对输入/输出(I ...
- java.nio.ByteBuffer 以及flip,clear及rewind区别
Buffer 类 定义了一个可以线性存放primitive type数据的容器接口.Buffer主要包含了与类型(byte, char…)无关的功能. 值得注意的是Buffer及其子类都不是线程安全的 ...
- Java - NIO
java.nio:NIO-2: NIO 面向流的IO体系一次只能处理一个或多个字节/字符,直至读取所有字节/符,且流中的数据不能前后移动.效率低,当数据源中没有数据时会阻塞线程.Java-4提供的新A ...
- Java NIO 之缓冲区
缓冲区基础 所有的缓冲区都具有四个属性来 供关于其所包含的数据元素的信息. capacity(容量):缓冲区能够容纳数据的最大值,创建缓冲区后不能改变. limit(上界):缓冲区的第一个不能被读或写 ...
- Java NIO 基础
Java在JDK1.4中引入了 java.nio 类库,为Java进军后端Server和中间件开发打开了方便之门. 一般而言,这里的 nio 代表的是 New I/O,但是从实质上来说,我们可以将其理 ...
随机推荐
- AC日记——天天爱跑步 洛谷 P1600
天天爱跑步 思路: 树上差分+分层动态线段树: (伏地膜,跪烂xxy) 代码: #include <bits/stdc++.h> using namespace std; #define ...
- AC日记——[Sdoi2010]粟粟的书架 bzoj 1926
1926 思路: 主席树+二分水题: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 500005 #defi ...
- NoSQL 数据库应用
类型 部分代表 特点 列存储 Hbase Cassandra Hypertable 顾名思义,是按列存储数据的.最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查 ...
- Linux操作命令(三)
本次实验将介绍 Linux 命令中 more.less.head.tail 命令的用法. more less head tail 1.more ·more功能类似cat,cat命令是将整个文件的内容从 ...
- 【SQL】ORACLE生成临时表
在日常的SQL查询中,我们需要对要查询的数据进行事先处理,然后再在预先处理好的数据里面进行查询.此时我们就需要用到临时表了,将数据预先处理好放到临时表里面,然后再在临时表里根据我们需要的条件进行查询. ...
- 洛谷——P2121 拆地毯
P2121 拆地毯 题目背景 还记得 NOIP 2011 提高组 Day1 中的铺地毯吗?时光飞逝,光阴荏苒,三年过去了.组织者精心准备的颁奖典礼早已结束,留下的则是被人们踩过的地毯.请你来解决类似于 ...
- ANY和SOME 运算符
在SQL中ANY和SOME是同义词,所以下面介绍的时候只使用ANY,SOME的用法和功能和ANY一模一样.和IN运算符不同,ANY必须和其他的比较运算符共同使用,而且必须将比较运算符放在ANY 关键字 ...
- Xamarin Visual Studio不识别JDK路径
Xamarin Visual Studio不识别JDK路径 错误信息:Cannot find adb.exe in specified SDK path.出现这种情况,是因为Visual Studio ...
- 手机发送验证码—.net代码
注册过程中,短信发送验证码流程如下: (1).用户提交手机号码,申请湖区验证码 (2).网站按照预制规则生成验证码 (3).网站将用户手机号码和验证码发送到短信平台 (4).将制定内容发送到制定手机号 ...
- 【转】python assert用法
1.assert语句用来声明某个条件是真的.2.如果你非常确信某个你使用的列表中至少有一个元素,而你想要检验这一点,并且在它非真的时候引发一个错误,那么assert语句是应用在这种情形下的理想语句.3 ...