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. drop有default constraint的column

    有时候我们在drop column的时候,会遇到一些default constraints而不能drop,如果我们已经知道constraint name,则可以用下面的语句先把constraint r ...

  2. USB 之传输编码格式 NRZI 介绍

    记录NRZI (Non-Return-to-Zero Inerted code) 非归零翻转编码,之前,我先稍微记录一下他的前身. RZ 编码(Return- to - zero coding) RZ ...

  3. sublime text2 配置

    2.使用Package Control组件安装 也可以安装package control组件,然后直接在线安装: 按Ctrl+`调出console 粘贴以下代码到底部命令行并回车:import url ...

  4. JavaScript中的Boolean 方法与Number方法

    <html> <head> <script type="text/javascript"> //创建 var str = "aaafg ...

  5. 每个Web开发者都应该知道的关于URL编码的知识

    本文首先阐述了人们关于统一资源定位符(URL)编码的普遍的误读,其后通过阐明HTTP场景下的URL encoding 来引出我们经常遇到的问题及其解决方案.本文并不特定于某类编程语言,我们在Java环 ...

  6. AJAX乱码解决新方法

    用过AJAX的朋友肯定知道javascript是使用UTF-8国际编码,即每个汉字用3个字节来存储,但是这就造成了用AJAX来send数据的时候出现乱码.     有一种解决办法就是使用encodeU ...

  7. [oracle] 安装卸载及常见问题

    (1)安装oracle10g备注: ① 检查安装版本是否复合安装主机的硬件要求,避免版本不兼容.如64位的oracle就不能在x86的机器上运行安装. ② 检查安装主机是否满足oracle的硬件要求, ...

  8. VMware提示:已将该虚拟机配置为使用 64 位客户机操作系统。但是,无法执行 64 位操作。解决方案

    新买了个笔记本,在学习大数据的时候装上VMWare,运行虚拟机发现提示无法执行64位操作.本人系统是win7,64位系统. 之后就是一顿度娘,发现千篇一律都是检测CPU支不支持虚拟化,支持的话去BIO ...

  9. DSSM(DEEP STRUCTURED SEMANTIC MODELS)

    Huang, Po-Sen, et al. "Learning deep structured semantic models for web search using clickthrou ...

  10. Learning to act by predicting the future

    Dosovitskiy, Alexey, and Vladlen Koltun. "Learning to act by predicting the future." arXiv ...