关于Java中的NIO,网上很多资料,关于ByteBuffer类也有很多内容,这里要说的是clear、flip、rewind三个方法的区别和对应缓冲区的状态。
ByteBuffer类没有构造方法,只能通过ByteBuffer.allocate(int)来分配一个新的字节缓冲区
下面我用图片展示不同状态下缓冲区,图中管道即操作缓冲区的IO流
这里需要明白以下几个术语的含义:
缓冲区容量:capacity
限制:limit
位置:position
标记:mark
初始化和clear方法执行后的缓冲区状态,如下:
clear方法作用是清空缓冲区,设置位置为0,限制=容量,并取消标记,其源码如下:
public final Buffer clear() {
position = 0; //设置为0
limit = capacity; //极限和容量相同
mark = -1; //取消标记
return this;
}
准备读取或读取中的缓冲区状态,如下:
flip方法执行后的缓冲区状态,如下:
flip方法设置位置为0,限制=位置,并取消标记,其源码如下:
public final Buffer flip() {
limit = position;
position = 0;
mark = -1;
return this;
}
rewind方法执行后的缓冲区状态,如下:
rewind方法设置位置为0,限制不变,并取消标记,其源码如下:
public final Buffer flip() {
limit = position;
position = 0;
mark = -1;
return this;
}
分享到:
相关推荐
使用nio byteBuffer 实现按行读取文件(大文件) 在window/linux/macOS上均测试通过 对于中文乱码也已处理成功 完整注释,可随需求更改 有问题请邮件:mly610865580@126.com
设计思想: 每次通过nio读取字节到 fbb中 然后对fbb自己中的内容进行行判断即 10 回车 13 行号 0 文件结束 这样字节的判断,然后 返回行 如果 到达 fbb的结尾 还没有结束,就再通过nio读取一段字节,继续处理。 ...
Chronicle Bytes具有与Java NIO的ByteBuffer类似的用途,但具有一些扩展。 API支持。 64位大小 UTF-8和ISO-8859-1编码的字符串。 线程安全关闭堆内存操作。 通过引用计数确定性地释放资源。 压缩数据类型,...
NULL 博文链接:https://chinaestone.iteye.com/blog/468138
NULL 博文链接:https://zheng12tian.iteye.com/blog/1094811
使用 io和nio 各个方式进行文件拷贝;...使用nio+byteBuffer 实现按行读取文件(大文件),在window/linux/macOS上均测试通过,对于中文乱码也已处理成功 完整注释,可随需求更改 有问题请邮件:mly610865580@126.com
• Multipurpose ...MINA没有直接使用使用java NIO的ByteBuffer类。它使用一个自制的ByteBuffer来扩展java。如果你使用MINA,你将不需要直接使用NIO buffers,因为仅使用MINA buffers就可以完成大多数buffer操作
在NIO中,数据的读写操作始终是与缓冲区相关联的(读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据按顺序填入缓冲区) 缓冲区是定长的,基本上它只是一个列表,它的所有元素都是基本数据类型。...
深入理解Apache_Mina_(1)----_Mina的几个类 深入理解Apache_Mina_(2)----_与IoFilter相关的几个...深入理解Apache_Mina_(6)----_Java_Nio_ByteBuffer与Mina_ByteBuffer的区别(类图) 相信你们也愿意去下载更有价值的东西
目录运行效果截图:源代码:Server端:Client端:使用时注意:(持续更新) 运行效果截图: 启动server端: ...import java.nio.ByteBuffer; import java.nio.channels.Channel; import java.nio.c
import java.nio.ByteBuffer; import java.nio.channels.SocketChannel; import java.util.Scanner; /** * 符合TCP协议,非阻塞IO NIO完成对应的客户端代码 * @Author kk * @Date 2020/3/16 15:10 */ public cl
Java-NIO-Programming-Cookbook英文版和配套源代码。有一个使用DirectByteBuffer和Non-Direct Buffer文件读取速度的对比实验程序和测试结果。
Buffer是数据的容器,在nio中负责数据的存取,java为不同数据类型提供了相对应的缓冲区类型 如:ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer 、DoubleBuffer 等。 Buffer的基本使用 ...
http://docs.oracle.com/javase/6/docs/api/java/nio/ByteBuffer.html 主要用于各种网络协议的组包具体用法可以点上面的网址功能和jAVA的一样
import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.SocketChannel; import java.util.Iterator; import com.nio.user.ClientUser...
import java.nio.ByteBuffer;import android.app.Activity;import android.media.MediaCodec;import android.media.MediaCodec.BufferInfo;import android.media.MediaCodecInfo;import android.media....
在JDK 1.4以前,Java的IO操作集中在java.io这个包中,是基于流的同步(blocking)API。...从JDK 1.4起,NIO API作为一个基于缓冲区,并能提供异步(non-blocking)IO操作的API被引入。本文对其进行深入的介绍。
nio_stream_parse_json 在NIO的环境里如何解析json 场景: 在一些nio的网络框架, 比如netty, mina等, 读取数据时异步的, 也就是不能通过InputStream.read来以阻塞的方式读取数据. 而大多数json的库, 如FastJSON, ...
用java.nio.ByteBuffer类实现音频的反向播放,这个可以让你感觉时光倒流时我们能听到的声音。 举个例子:假如你说了句话“我爱你!”,时光倒回的话就是“!你爱我”,很有意思哦 体验下吧! 你会发现那些明星那么...
yubo-java-nioNIO 直接缓冲区 VS 非直接缓冲区直接缓冲区1、直接... Scatter/Gather 应该与直接 ByteBuffer 一起使用,以从本机 I/O 中获得最大优势。Java 引用对象类型1、JCP java并发实践JCP AQS - 抽象排队同步器