JAVA NIO:Buffer.mark()的用法
在默认情况下,Buffer.mark()并没有什么用处,既不会影响Buffer的遍历,也不会影响Buffer的位置统计函数,如remaining()函数,能影响这些操作的行为只有position()。
位置统计示例代码如下:
CharBuffer buffer = CharBuffer.allocate(10);
buffer.put('你');
buffer.put('好');
// 直接跳转位置
buffer.position(5);
// 现在剩余的缓冲区只有5了
assertThat(buffer.remaining(), IsEqual.equalTo(5));
位置遍历的代码如下:
CharBuffer buffer = CharBuffer.allocate(10);
buffer.put('你');
buffer.put('好');
// 不需要mark也可进行遍历,
buffer.position(0);
// 遍历数据
while(buffer.hasRemaining()) {
System.out.println(buffer.get());
}
从上面的两端代码可以看出,无论是遍历还是位置统计都不需要mark()操作,但结合使用reset(),mark()就可以大显身手了:
CharBuffer buffer = CharBuffer.allocate(10);
buffer.put('你');
buffer.put('好');
// 经过标记后,会持续记住此位置
buffer.position(0).mark();
while(buffer.hasRemaining()) {
System.out.println(buffer.get());
// mark将会跳转到上次标记的位置
buffer.reset();
}
所以上述的程序将会持续输出“你”字,并进入无穷循环。
总结
把Buffer的函数整理一下,我们发现很多函数都提供了类似的功能,如:
# 回到第0个位置并标记
buffer.position(0).mark();
# 与上述函数的简洁写法
buffer.flip();
# 在0位置进行标记,reset也能达到类似的效果
buffer.reset();
JAVA NIO:Buffer.mark()的用法的更多相关文章
- Java NIO Buffer(netty源码死磕1.2)
[基础篇]netty源码死磕1.2: NIO Buffer 1. Java NIO Buffer Buffer是一个抽象类,位于java.nio包中,主要用作缓冲区.Buffer缓冲区本质上是一块可 ...
- (二:NIO系列) Java NIO Buffer
出处:Java NIO Buffer Buffer是一个抽象类,位于java.nio包中,主要用作缓冲区.Buffer缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO ...
- java.nio.Buffer 中的 flip()方法
在Java NIO编程中,对缓冲区操作常常需要使用 java.nio.Buffer中的 flip()方法. Buffer 中的 flip() 方法涉及到 Buffer 中的capacity.posi ...
- Java NIO Buffer缓冲区
原文链接:http://tutorials.jenkov.com/java-nio/buffers.html Java NIO Buffers用于和NIO Channel交互.正如你已经知道的,我们从 ...
- [翻译] java NIO Buffer
原文地址:http://tutorials.jenkov.com/java-nio/buffers.html JAVA NIO 是在和channel交互的时候使用的.正如你所知道的,数据是从chann ...
- java NIO Buffer 详解(1)
1.java.io 最为核心的概念是流(stream),面向流的编程,要么输入流要么输出流,二者不可兼具: 2.java.nio 中拥有3个核心概念: Selector Channel, Buffe ...
- Java NIO —— Buffer(缓冲区)
Buffer是一个抽象类,位于java.nio包中,主要用作缓冲区.注意:Buffer是非线程安全类. 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO Buffer ...
- Java NIO Buffer说明
Buffer 有3个重要的参数:位置(position).容量(capactiy).上限(limit) 位置(position): 写:当前缓冲区的位置,将从position的下一个位置写数据. 读: ...
- java.nio.Buffer源码阅读
Java 自从 JDK1.4 起,对各种 I/O 操作使用了 Buffer 和 Channel 技术.这种更接近于操作系统的的底层操作使得 I/O 操作速度得到大幅度提升,下面引用一段<Java ...
随机推荐
- Ng第三课:线性代数回顾(Linear Algebra Review)
3.1 矩阵和向量 3.2 加法和标量乘法 3.3 矩阵向量乘法 3.4 矩阵乘法 3.5 矩阵乘法的性质 3.6 逆.转置 3.1 矩阵和向量 如图:这个是 4×2 矩阵,即 4 行 ...
- leetcode - [5]Insertion Sort List
Sort a linked list using insertion sort. 思路:插入排序 #include <iostream> using namespace std; stru ...
- centos6.4 安装wireless驱动
安装完centos6.4之后,目测只有有线的驱动,没有无线驱动. 一.检测网卡 [root@centos ~]# lspci | grep Net :.11b/g LP-PHY (rev ) :) 第 ...
- GAE、SAE与BAE的对比分析(百度云)
https://blog.csdn.net/zhongguomao/article/details/53282307 https://cloud.baidu.com/event/experience/ ...
- 一个支持邮件带附件群发的java类
import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.Date;import ...
- 20169207《linux内核原理与分析》第二周作业
第一部分:学习MOOC网Linux内核分析的课程. 首先对冯诺依曼体系结构和存储程序计算机工作模型进行了了解,查阅资料,对冯诺依曼体系的特点与课堂上的相结合,真实明白了模型的特点. 在汇编C语言程序时 ...
- POJ1468 Sorting Slides
Sorting Slides Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4442 Accepted: 1757 De ...
- java数据库编程(未整理完,待续)
java使用数据库可以借助jdbc这个中间媒介.本文将介绍如何使用jdbc连接数据库,数据库的基本操作和jdbc的事物处理. 1 连接数据库 一般java连接数据库,都有几个步骤: 0.导入相应的驱动 ...
- 查找对端mac地址
1.ping对端mac: 2.arp命令查找:
- WPF 打印界面(控件)到A4纸
这次遇到一个需求,就是将整个界面打印在A4纸上. 需求清楚后,Bing一下关于打印,就找到一个类PrintDialog ,其中两个方法可能会用到: 特别是public void PrintVisual ...