java Channel filp compact
import java.nio.ByteBuffer;
//Listing 7-1. Copying Bytes from an Input Channel to an Output Channel
public class ty {
public static void main(String[] args) {
ty t = new ty();
ByteBuffer buffer = t.returnbb();
System.out.println(buffer);
//// 之所以调用ByteBuffer.flip()方法是因为在向ByteBuffer写入数据后,
//// position为缓冲区中刚刚读入的数据的最后一个字节的位置,
//// flip方法将limit值置为position值,position置0,
//// 这样在调用get*()方法从ByteBuffer中取数据时就可以取到ByteBuffer中的有效数据
//当读取时 从头开始,到limit处
buffer.flip();
while (buffer.hasRemaining()) {
System.out.println((char) buffer.get());
}
buffer.flip();
System.out.println("---------------------");
//取出 一个元素
System.out.println((char) buffer.get());
System.out.println("---------------------");
// clear()与compact()方法
// 一旦读完Buffer中的数据,需要让Buffer准备好再次被写入。
// 可以通过clear()或compact()方法来完成。
// 如果调用的是clear()方法,position将被设回0,limit被设置成capacity的值。
// 换句话说,Buffer 被清空了。Buffer中的数据并未清除,
// 只是这些标记告诉我们可以从哪里开始往Buffer里写数据。
// 如果Buffer中有一些未读的数据,调用clear()方法,数据将“被遗忘”,
// 意味着不再有任何标记会告诉你哪些数据被读过,哪些还没有。
// 如果Buffer中仍有未读的数据,且后续还需要这些数据,但是此时想要先先写些数据,
// 那么使用compact()方法。
// compact()方法将所有未读的数据拷贝到Buffer起始处。
// 然后将position设到最后一个未读元素正后面。limit属性依然像clear()方法一样,
// 设置成capacity。现在Buffer准备好写数据了,但是不会覆盖未读的数据
//保留剩余元素 并添加新元素
buffer.compact();
System.out.println(buffer);
buffer.put((byte)'m');
buffer.flip();
while (buffer.hasRemaining()) {
System.out.println((char) buffer.get());
}
}
public ByteBuffer returnbb() {
ByteBuffer buffer = ByteBuffer.allocate();
buffer.put((byte) 'H').put((byte) 'e').put((byte) 'l').put((byte) 'l')
.put((byte) 'o');
buffer.put((byte) 'A');
return buffer;
}
}
output :
java.nio.HeapByteBuffer[pos= lim= cap=]
H
e
l
l
o
A
---------------------
H
---------------------
java.nio.HeapByteBuffer[pos= lim= cap=]
e
l
l
o
A
m
java Channel filp compact的更多相关文章
- java Channel
Channel Channel与流 基本上,所有的 IO 在NIO 中都从一个Channel 开始.Channel 有点象流.数据可以从Channel读到Buffer中,也可以从Buffer 写到Ch ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- Netty学习二:Java IO与序列化
1 Java IO 1.1 Java IO 1.1.1 IO IO,即输入(Input)输出(Output)的简写,是描述计算机软硬件对二进制数据的传输.读写等操作的统称. 按照软硬件可分为: 磁盘I ...
- 20145208 《Java程序设计》第8周学习总结
20145208 <Java程序设计>第8周学习总结 教材学习内容总结 NIO与NIO2 NIO与IO的区别 IO NIO 面向流 面向缓冲 阻 ...
- 20155308 2016-2017-2 《Java程序设计》第8周学习总结
20155308 2016-2017-2 <Java程序设计>第8周学习总结 教材学习内容总结 第十四章 NIO与NIO2 NIO(New IO)-from JDK1.4 NIO2 -fr ...
- Java连接MQ的实例, 测试类
package cjf.mq.mqclient; import com.ibm.mq.MQC; import com.ibm.mq.MQEnvironment; import com.ibm.mq.M ...
- 【转】ByteBuffer 到底怎么用?网络编程中一点总结!--不错
原文网址:http://cuisuqiang.iteye.com/blog/1443212 做tcp网络编程,要解析一批批的数据,可是数据是通过Socket连接的InputStream一次次读取的,读 ...
- Java-NIO(二):缓冲区(Buffer)的数据存取
缓冲区(Buffer): 一个用于特定基本数据类行的容器.有java.nio包定义的,所有缓冲区都是抽象类Buffer的子类. Java NIO中的Buffer主要用于与NIO通道进行交互,数据是从通 ...
- ByteBuffer使用实例
ByteBuffer作为JDK的字节流处理对象,这里举个小例子说明下用法,直接上代码: package com.wlf.netty.nettyserver; import org.junit.Asse ...
随机推荐
- thinkphp where()条件查询
今天来给大家讲下查询最常用但也是最复杂的where方法,where方法也属于模型类的连贯操作方法之一,主要用于查询和操作条件的设置.where方法的用法是ThinkPHP查询语言的精髓,也是Think ...
- 登录Cloudera Manager时报错org.hibernate.exception.GenericJDBCException: Could not open connection
去Cloudera Server上边看了一下日志: cat /opt/cloudera-manager/log/cloudera-scm-server/cloudera-scm-server.log ...
- python 把函数作为参数 ---高阶函数
把函数作为参数 在2.1小节中,我们讲了高阶函数的概念,并编写了一个简单的高阶函数: def add(x, y, f): return f(x) + f(y) 如果传入abs作为参数f的值: add( ...
- 数学 赛码 1010 GCD
题目传送门 /* 数学:官方题解 首先,数组中每个元素至少是1 然后对于任意一个询问Li, Ri, Ansi, 说明Li ~ Ri中的元素必定是Ansi的倍数,那么只需将其与Ansi取最小公倍数即可 ...
- 模拟 ACdream 1196 KIDx's Pagination
题目传送门 /* 简单模拟:考虑边界的情况输出的是不一样的,还有思维好,代码能短很多 */ #include <cstdio> #include <iostream> #inc ...
- 最短路(Floyd_Warshall) POJ 1125 Stockbroker Grapevine
题目传送门 /* 最短路:Floyd模板题 主要是两点最短的距离和起始位置 http://blog.csdn.net/y990041769/article/details/37955253 */ #i ...
- Redis String命令
命令 解释 APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾. 如果 key 不存在, APPEND ...
- Distributed RPC —— 分布式RPC
This tutorial showed how to do basic stream processing on top of Storm. There's lots more things you ...
- Codeforces Round #190 DIV.2 A. Ciel and Dancing
#include <cstdio> #include <iostream> #include <vector> using namespace std; int m ...
- 深入理解JVM—性能监控工具
(转自:http://yhjhappy234.blog.163.com/blog/static/31632832201222691738865/) 我们知道,在JVM编译期和加载器,甚至运行期已经做了 ...