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的更多相关文章

  1. java Channel

    Channel Channel与流 基本上,所有的 IO 在NIO 中都从一个Channel 开始.Channel 有点象流.数据可以从Channel读到Buffer中,也可以从Buffer 写到Ch ...

  2. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  3. Netty学习二:Java IO与序列化

    1 Java IO 1.1 Java IO 1.1.1 IO IO,即输入(Input)输出(Output)的简写,是描述计算机软硬件对二进制数据的传输.读写等操作的统称. 按照软硬件可分为: 磁盘I ...

  4. 20145208 《Java程序设计》第8周学习总结

    20145208 <Java程序设计>第8周学习总结 教材学习内容总结 NIO与NIO2 NIO与IO的区别 IO           NIO 面向流             面向缓冲 阻 ...

  5. 20155308 2016-2017-2 《Java程序设计》第8周学习总结

    20155308 2016-2017-2 <Java程序设计>第8周学习总结 教材学习内容总结 第十四章 NIO与NIO2 NIO(New IO)-from JDK1.4 NIO2 -fr ...

  6. Java连接MQ的实例, 测试类

    package cjf.mq.mqclient; import com.ibm.mq.MQC; import com.ibm.mq.MQEnvironment; import com.ibm.mq.M ...

  7. 【转】ByteBuffer 到底怎么用?网络编程中一点总结!--不错

    原文网址:http://cuisuqiang.iteye.com/blog/1443212 做tcp网络编程,要解析一批批的数据,可是数据是通过Socket连接的InputStream一次次读取的,读 ...

  8. Java-NIO(二):缓冲区(Buffer)的数据存取

    缓冲区(Buffer): 一个用于特定基本数据类行的容器.有java.nio包定义的,所有缓冲区都是抽象类Buffer的子类. Java NIO中的Buffer主要用于与NIO通道进行交互,数据是从通 ...

  9. ByteBuffer使用实例

    ByteBuffer作为JDK的字节流处理对象,这里举个小例子说明下用法,直接上代码: package com.wlf.netty.nettyserver; import org.junit.Asse ...

随机推荐

  1. ListView系列(七)——Adapter内的onItemClick监听器四个arg参数 (转)

    举个例子你会理解的更快:X, Y两个listview,X里有1,2,3,4这4个item,Y里有a,b,c,d这4个item.如果你点了b这个item.如下: public void onItemCl ...

  2. Gym 100463D Evil DFS

    Evil Time Limit: 5 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100463/attachments Descri ...

  3. VMware 虚拟机网络 组网问题

    1.VMware虚拟机组网概述 整个结构: 需要确定的内容: 1) 虚拟机连接到哪个VMnet(交换机)? 2) VMnet(交换机)的组网模式? 首先,讲一下VMware的界面内容 安装好VMwar ...

  4. Android,visibility属性

    Android,visibility属性 1) 可见(visible)XML文件:android:visibility="visible"Java代码:view.setVisibi ...

  5. AsyncTask的基础讲解

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); s ...

  6. Hark的数据结构与算法练习之插入排序

    算法说明: 先是拿语言进行一下描述: 假如是做降序排序,那么从头开始扫描每个数字,使每个数字与它前面的若干数字进行比较,直接找到小于当前数字a(当前数字以a代替)的数字b(小于a的数字以b代替). 然 ...

  7. Xamarin如何生成Android项目的APK

    Xamarin如何生成Android项目的APK 首先需要选择Release模式生成项目.然后从“生成”菜单中选择Export Android Package命令,就可以导出APK包.APK保存在An ...

  8. Android下载文件到SD卡

    HttpURLConnection 上传方式: 尝试理解这两种流的区别: InputStreamReader 的读取方式: //创建一个URL对象 URL url = new URL(urlStrin ...

  9. IOS 获取最新设备型号方法

    1.IOS 获取最新设备型号方法列表最新对照表:http://theiphonewiki.com/wiki/Models方法: #import "sys/utsname.h” struct ...

  10. TYVJ P1062 合并傻子 Label:环状dp

    背景 从前有一堆傻子,钟某人要合并他们~但是,合并傻子是要掉RP的...... 描述 在一个园形操场的四周站着N个傻子,现要将傻子有次序地合并成一堆.规定每次只能选相邻的2个傻子合并成新的一个傻子,并 ...