【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 ...
随机推荐
- [sz,rz]使用sz/rz在两台Linux设备之间传输数据
转自:https://superuser.com/questions/604055/using-rz-and-sz-under-linux-shell zsend #!/bin/sh DEV=/dev ...
- nfs简述
参考:http://www.51lun-wen.cn/shenghuo/dianniaowangluo/diannaowangluo/czxt/Linux/200810/354248.html 1.什 ...
- iOS- 如何将应用集成发短信、发邮件、打电话
今天把APP里常用小功能 例如发短信.发邮件.打电话. 全部拿出来简单说说它们的实现思路. 1.发短信 实现打电话的功能,主要二种方法,下面我就分别说说它们的优缺点. 1.1.发短信(1)——URL ...
- Java NIO使用及原理分析 (一)(转)
最近由于工作关系要做一些Java方面的开发,其中最重要的一块就是Java NIO(New I/O),尽管很早以前了解过一些,但并没有认真去看过它的实现原理,也没有机会在工作中使用,这次也好重新研究一下 ...
- MySql 生成日期随机数
select DATE_ADD(sd, INTERVAL FLOOR(1+ RAND() * ((ABS(UNIX_TIMESTAMP(ed) - UNIX_TIMESTAMP(sd))) - 1)) ...
- iOS边练边学--介绍布局的三种方法
使用代码实现Autolayout的方法1- 创建约束 +(id)constraintWithItem:(id)view1attribute:(NSLayoutAttribute)attr1relate ...
- linux cpio
在使用bootimg tools压缩和打包android的ramdisk时,用到了cpio命令.所以了解一下用法. 参考 http://man.linuxde.net/cpio http://cn.l ...
- BCM_I2C函数更改
版本:sdk-xgs-robo- 平台:BCM53344 应用:控制POE芯片 描述:POE控制芯片使用PD69200,使用i2c与其通信,每次需要发送15字节数据,并接受15字节的返回数据. 1.更 ...
- JVM内存模型 小小结
可以看一下我的另一篇总结 JVM运行时数据区与JVM堆内存模型小结 推荐一篇文章,尚学堂的 Java内存模型深度解读 . 不方便全文转载,就摘录下吧. 以往的认知都是以基本类型.引用类型.常量.方法等 ...
- The configuration file 'appsettings.json' was not found and is not optional
问: .Net Core: Application startup exception: System.IO.FileNotFoundException: The configuration file ...