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. SQLServer2008 绑定默认值

    默认值或绑定:(newid())值:2E014A19-7AF5-471E-866C-DC5D6DFE59A5 (dateadd(day,(1),getdate()))值: 2014-07-31 20: ...

  2. android:layout_weight属性详解(转)

    在android开发中LinearLayout很常用,LinearLayout的内控件的android:layout_weight在某些场景显得非常重要,比如我们需要按比例显示.android并没用提 ...

  3. c# 作业1

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. Android应用开发--MP3音乐播放器代码实现(一)

    需求1:将内存卡中的MP3音乐读取出来并显示到列表当中 1.   从数据库中查询所有音乐数据,保存到List集合当中,List当中存放的是Mp3Info对象 2.   迭代List集合,把每一个Mp3 ...

  5. python 自定义排序函数

    自定义排序函数 Python内置的 sorted()函数可对list进行排序: >>>sorted([36, 5, 12, 9, 21]) [5, 9, 12, 21, 36] 但 ...

  6. mysql死锁问题

    形成死锁的条件 我们mysql用的存储引擎是innodb,从日志来看,innodb主动探知到死锁,并回滚了某一苦苦等待的事务. 问题来了,innodb是怎么探知死锁的? 直观方法是在两个事务相互等待时 ...

  7. 2016.6.13 php与MySQL数据库交互之数据库中的商品信息展示

    <table width="550" border="2" align="center" cellpadding="0&qu ...

  8. [Unity2D]脚本的使用规则

    Unity2D的游戏脚本可以使用3中开发语言来编写:C#,JavaScript和BOO.你可以选择你熟悉的编程语言来编写,通常C#语言的编程功能会更加强大一些,成为首选的语言.在Unity2D中使用C ...

  9. APIO2015

    还没有写完APIO2015的题目,打算今天写一写. T1: 按位DP,DP时要保证已确定的位为0. 前4组设f[n][k]表示把前n个分成k组是否合法. 最后一组设g[n]表示把前n个最少分为多少组才 ...

  10. Odoo(OpenERP) 多个子类重载同一个父类方法的执行顺序及如何调用父类的父类方法

    首先说下起因,在修改英国会计模块(没错,就是那个安格鲁撒克逊记账模式!)中不符合中国国情的部分供能时,碰到了一个棘手的问题,简单的说就是B类继承它的父类A并重载了A的方法M,同时C类也继承了A类也重载 ...