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. 关于JXL读写以及修改EXCEL文件<转>

    首先引用网上的文章,谈谈JXL与POI的区别 POI为apache公司的一个子项目,主要是提供一组操作windows文档的Java API. Java Excel俗称jxl是一开放源码项目,通过它Ja ...

  2. Akka 编程: 什么是Actor

    上一篇我们简介了Actor系统.说明了Actor之间存在着层次关系,它也是构成Actor应用的最主要的单位. 本篇介绍Actor本身的一些基本概念.一个Actor包括了State(状态),Behavi ...

  3. jQuery EasyUI教程之datagrid应用

    一.利用jQuery EasyUI的DataGrid创建CRUD应用 对网页应用程序来说,正确采集和管理数据通常很有必要,DataGrid的CRUD功能允许我们创建页面来列表显示和编辑数据库记录.本教 ...

  4. jQuery源码分析-jQuery中的循环技巧

    作者:nuysoft/JS攻城师/高云 QQ:47214707 EMail:nuysoft@gmail.com 声明:本文为原创文章,如需转载,请注明来源并保留原文链接. 前记:本文收集了jQuery ...

  5. 自己写的jQuery 左右选择框,大家多多指教!

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...

  6. msysgit使用方法

    安装好后运行"Git Bash",出现命令框. 输入 ssh-keygen -t rsa -C “your_email@youremail.com” 会提示SSH Public K ...

  7. maven pom.xml 详解(注释版)

    转自:http://mrlee23.iteye.com/blog/1806412 pom.xml <project xmlns="http://maven.apache.org/POM ...

  8. AOP(Aspect Oriented Programming),即面向切面编程

    AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善.OOP引入 ...

  9. ubuntu 12.04 LTS server 中文乱码【转】

    ubuntu 12.04 LTS server 中文乱码 最近装了一台ubuntu 12.04 server装完后是没有桌面的,后来又手动安装了桌面,但进行后发现桌面是乱码,应该是缺少字体在googl ...

  10. Centos6.8/7.0搭建Git服务http访问方式

    安装Git版本:git 2.10.0 Git访问方式:基于http的基本验证(非SSL) 1. 安装Apache软件: [root@localhost ~]# yum install httpd 设置 ...