package com.slp.nio;

 import org.junit.Test;

 import java.nio.ByteBuffer;

 /**
* Created by sanglp on 2017/3/1.
* 一、缓冲区:在Java nio中负责数据的存储。缓冲区就是数据,用于村塾不同数据类型的数据
* 根据数据类型的不同(boolean类型除外),提供了相应类型的缓冲区
* ByteBuffer
* CharBuffer
* ShortBuffer
* IntBuffer
* FloatFuffer
* DoubleBuffer
* 上述缓冲区的管理方式几乎一致,通过allocate()获取缓冲区
* 二、缓冲区有存取数据的两个核心方法
* put()存储数据到缓冲区中
* get()获取缓冲区中的数据
* 三、缓冲区的四个核心属性
* capacity:容量,表示缓冲区中最大存储数据的容量,一旦声明就不能改变
* limit:界限 表示缓冲区中可以操作数据的大小 limit后数据不能进行读写
* position:位置 缓冲区中正在操作数据的位置
* mark:标记 表示记录当前position的位置,可以通过reset()或辅导mark的位置
* 0<=mark<=position<=limit<=capacity
*
* 四、直接缓冲区与非直接缓冲区
* 非直接缓冲区:通过allocate()方法分配缓冲区,将缓冲区建立在JVM的内存中
* 直接缓冲区:通过allocateDirect()方法分配直接缓冲区,将缓冲区建立在物理内存中
*/
public class TestBuffer { @Test
public void test3(){
ByteBuffer buffer = ByteBuffer.allocateDirect(1024);
System.out.println(buffer.isDirect());//true
}
@Test
public void test2(){
String str="asdfgh";
ByteBuffer buffer = ByteBuffer.allocate(1024);
buffer.put(str.getBytes());
buffer.flip();
buffer.get(new byte[buffer.limit()],0,2);
System.out.println(new String(new byte[buffer.limit()],0,2));
System.out.println(buffer.position());//2
//标记
buffer.mark();
buffer.get(new byte[buffer.limit()],2,2);
System.out.println(new String(new byte[buffer.limit()],2,2));
System.out.println(buffer.position());//4
//reset()恢复到mark的位置
buffer.reset();
System.out.println(buffer.position());//2
//判断缓冲区中对否有
if(buffer.hasRemaining()){
System.out.println(buffer.remaining());//
}
} @org.junit.Test
public void test(){
String str="ABCDE";
//1、分配一个指定大小的缓冲区
ByteBuffer buf = ByteBuffer.allocate(1024);
System.out.println(buf.position());//
System.out.println(buf.limit());//
System.out.println(buf.capacity());//1024
//2、利用put()存入数据到缓冲区
buf.put(str.getBytes());
System.out.println(buf.position());//
System.out.println(buf.limit());//
System.out.println(buf.capacity());//1024
//3、切换为读取数据的模式
buf.flip();
System.out.println(buf.position());//
System.out.println(buf.limit());//
System.out.println(buf.capacity());//1024
//4、读取缓冲区中的数据
byte [] dest = new byte[buf.limit()];
buf.get(dest);
System.out.println(new String(dest,0,dest.length));//ABCDE
System.out.println(buf.position());//
System.out.println(buf.limit());//
System.out.println(buf.capacity());//1024 //5。rewind()可重复读数据
buf.rewind();
System.out.println(buf.position());//
System.out.println(buf.limit());//
System.out.println(buf.capacity());//1024
//6、清空缓冲区 但是缓冲区中的数据依然存在,但是处于被遗忘状态
buf.clear();
System.out.println(buf.position());//
System.out.println(buf.limit());//
System.out.println(buf.capacity());//
System.out.println((char)buf.get());//A
}
}

【Java nio】buffer的更多相关文章

  1. 【Java nio】 NonBlocking NIO

    package com.slp.nio; import org.junit.Test; import java.io.IOException; import java.net.InetSocketAd ...

  2. 【Java nio】Blocking nio2

    package com.slp.nio; import org.junit.Test; import java.io.File; import java.io.IOException; import ...

  3. 【Java nio】Channel

    package com.slp.nio; import org.junit.Test; import java.io.*; import java.nio.ByteBuffer; import jav ...

  4. 【Java nio】 Blocking nio

    package com.slp.nio; import org.junit.Test; import java.io.File; import java.io.IOException; import ...

  5. 【Java nio】java nio笔记

    缓冲区操作:缓冲区,以及缓冲区如何工作,是所有I/O的基础.所谓“输入/输出”讲的无非就是把数据移出货移进缓冲区.进程执行I/O操作,归纳起来也就是向操作系统发出请求,让它要么把缓冲区里的数据排干,要 ...

  6. 【Java NIO】一文了解NIO

    Java NIO 1 背景介绍 在上一篇文章中我们介绍了Java基本IO,也就是阻塞式IO(BIO),在JDK1.4版本后推出了新的IO系统(NIO),也可以理解为非阻塞IO(Non-Blocking ...

  7. 【JAVA NIO】java NIO

    本文是博主深入学习Netty前的一些铺垫,之前只是使用Netty,用的很粗暴,导包,上网找个DEMO就直接用,对Netty中的组件了解并不深入. 于是再此总结下基础,并对一些核心组件作如下记录: 1. ...

  8. 【java NIO】服务器端读写图片的一次排错经历

    上传文件方面: 一.前端 使用的是jQuery框架来上传图片,参考的是harttle大神博客:http://harttle.com/2016/07/04/jquery-file-upload.html ...

  9. 【Java面试】基础知识篇

    [Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充.源码分享见个人公告.Ja ...

随机推荐

  1. R语言实战实现基于用户的简单的推荐系统(数量较少)

    R语言实战实现基于用户的简单的推荐系统(数量较少) a<-c(1,1,1,1,2,2,2,2,3,3,3,4,4,4,5,5,5,5,6,6,7,7) b<-c(1,2,3,4,2,3,4 ...

  2. js学习系列之-----apply和call

    apply call 从字面意思就看出来,申请请,呼叫. 打个比方就是别人有什么功能,你向别人,申请 呼叫 一下,哥们拿你的功能用一下,而apply 和call就是实现这样的功能 apply 和cal ...

  3. 用R作Polar图等

    用R作如下的各国Gini系数的Polar barChart: 作上图的R代码为: library(ggplot2) GiniData<- read.csv('IncomeInequality.c ...

  4. 试读《基于MVC的JavaScript Web富应用开发》— 不一样的JavaScript

    前言 <基于MVC的JavaScript Web富应用开发>是ItEye在7月份发起试读的书.下载了试读的章节,发现只有全本的开始到第二章,第一章很简洁明了地讲述了JavaScript的历 ...

  5. javascript文本格式化之HTML标签(转载)

    文本格式化标签: 标签 描述 <b> 定义粗体文本. <big> 定义大号字. <em> 定义着重文字. <i> 定义斜体字. <small> ...

  6. 关于Cocos2d-x中的scheduleUpdate和update方法的使用

    一.如果要让某类实例对象要连续执行某些语句(比如让每个Block实例从运行框最右边移动到最左边) 要在Block类中增加一些东西 1.先在其.cpp文件的init()函数中执行scheduleUpda ...

  7. 【转】StackOverflow程序员推荐:每个程序员都应读的30本书

    “如果能时光倒流,回到过去,作为一个开发人员,你可以告诉自己在职业生涯初期应该读一本,你会选择哪本书呢?我希望这个书单列表内容丰富,可以涵盖很多东西.” 很多程序员响应,他们在推荐时也写下自己的评语. ...

  8. alien 进行rpm 包和deb 包之间的转换

    今天安装一个pandoc, 官方只提供了一个deb 的二进制包,为了在redhat 上安装,需要将deb 包转换成rpm 包. 使用工具alien : http://ftp.de.debian.org ...

  9. C#_获取汉字拼音

    using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressi ...

  10. 【转】Internet与Intranet区别

    提起Internet,大家都知道它是一个蓬勃发展的国际互联网. 而Intranet则是近两年才发展起来的新事物,通常被称作企业内部网. Internet是一组全球范围内信息资源的名字.这些资源非常巨大 ...