【Java nio】buffer
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的更多相关文章
- 【Java nio】 NonBlocking NIO
package com.slp.nio; import org.junit.Test; import java.io.IOException; import java.net.InetSocketAd ...
- 【Java nio】Blocking nio2
package com.slp.nio; import org.junit.Test; import java.io.File; import java.io.IOException; import ...
- 【Java nio】Channel
package com.slp.nio; import org.junit.Test; import java.io.*; import java.nio.ByteBuffer; import jav ...
- 【Java nio】 Blocking nio
package com.slp.nio; import org.junit.Test; import java.io.File; import java.io.IOException; import ...
- 【Java nio】java nio笔记
缓冲区操作:缓冲区,以及缓冲区如何工作,是所有I/O的基础.所谓“输入/输出”讲的无非就是把数据移出货移进缓冲区.进程执行I/O操作,归纳起来也就是向操作系统发出请求,让它要么把缓冲区里的数据排干,要 ...
- 【Java NIO】一文了解NIO
Java NIO 1 背景介绍 在上一篇文章中我们介绍了Java基本IO,也就是阻塞式IO(BIO),在JDK1.4版本后推出了新的IO系统(NIO),也可以理解为非阻塞IO(Non-Blocking ...
- 【JAVA NIO】java NIO
本文是博主深入学习Netty前的一些铺垫,之前只是使用Netty,用的很粗暴,导包,上网找个DEMO就直接用,对Netty中的组件了解并不深入. 于是再此总结下基础,并对一些核心组件作如下记录: 1. ...
- 【java NIO】服务器端读写图片的一次排错经历
上传文件方面: 一.前端 使用的是jQuery框架来上传图片,参考的是harttle大神博客:http://harttle.com/2016/07/04/jquery-file-upload.html ...
- 【Java面试】基础知识篇
[Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充.源码分享见个人公告.Ja ...
随机推荐
- [uart]UART中的硬件流控RTS与CTS
转自:http://blog.csdn.net/zeroboundary/article/details/8966586 在RS232中本来CTS 与RTS 有明确的意义,但自从贺氏(HAYES ) ...
- Android Activity动画属性简介
Android Activity动画属性简介 在Android当中 设置activity的动画 需要复写 android:windowAnimationStyle这个属性 我们自定义一个动画样式来继承 ...
- 【 Linux 】单台服务器上并发TCP连接数
单台服务器上并发TCP连接数 问题:一台服务器到底能够支持多少TCP并发连接呢? 1. 文件描述符限制: 对于服务器来说,每一个TCP连接都要占用一个文件描述符,一旦文件描述符使用完,新的 ...
- 二、Redis命令行和配置文件redis.windows.conf
一.Redis发送命令的两种方式 redis-cli -h localhost -p 6379redis-cli ping 返回pong 证明正常 二.命令返回值 1.状态回复,如ping命令 2.错 ...
- DataGridView使用技巧七:列顺序的调整、操作行头列头的标题
一.列顺序的调整 设定DataGridView的AllowUserToOrderColumns为True的时候,用户可以自由调整列的顺序. 当用户改变列的顺序的时候,其本身的Index不好改变,但是D ...
- 试验如何通过审核Google AdSense——我跟谷歌ads杠上啦
http://www.hankcs.com/appos/webhost/apply-google-ads.html —————————————————————————————————————————— ...
- jquery 新建的元素事件绑定问题研究[转]
原文:http://www.cnblogs.com/linzheng/archive/2010/10/17/1853568.html js的事件监听跟css不一样,css只要设定好了样式,不论是原来就 ...
- 在JavaScript里写类层次结构?别那么做!
从理论上讲,JavaScript并没有类.在实践中,下面的代码片段被广泛认为是JavaScript“类”的一个例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 fu ...
- ajax传值 乱码问题
ajax.overrideMimeType("text/xml;charset=GBK");
- fanqiang_bak