package com.sico.pck01_nio;
import java.nio.ByteBuffer;
import org.junit.Test;
/**
 * @author Sico
 * 1、NIO入门:三个核心概念如下:
 *   |--通道:连接作用,连接数据源和目标地
 *   |--缓冲区:用于存取数据
 *   |--选择器:
 *   
 * 2、NIO与IO的区别:
 *   |--IO面向流,NIO面向缓冲区
 *   |--IO阻塞,NIO非阻塞
 *   |--
 * 3、(1)缓冲区:负责数据的存取,底层数组(用于存取不同类型的数据),根据类型的不同有相应类型的缓冲区(boolean除外):ByteBuffer,CharBuffer,LongBuffer,IntBuffer,FloatBuffer,
 *   DoubleBuffer,ShortBuffer===》》》以上缓冲区的管理方式类似,都是通过allocate换区缓冲区。最常用为ByteBuffer缓冲区
 *   (2)缓冲区中存取数据的两个核心方法,put存,get取
 *   (3)缓冲区中的核心属性
 *    |--mark:记录当前position的位置,通过reset回复到mark记录的位置
      |--position:缓冲区中正在数据的位置
      |--limit:缓冲区中可以操作数据的大小,limit后面的数据无法操作
      |--capacity:缓冲区的最大容量,一旦声明不允许改变,原因:底层是数组,数组大小声明后不允许更改
                 规律:mark<=position<=limit<=capacity
 *
 */
public class Nio01 {
@Test
public void fun02(){
ByteBuffer buf = ByteBuffer.allocate(1024);
buf.put("abcde".getBytes());
printProperty(buf);
print("******************************");
buf.flip();
byte[] dst=new byte[buf.limit()];
buf.get(dst, 0, 2);
print("获取到的数据:"+new String(dst));
buf.mark();
printProperty(buf);
print("******************************");
buf.get(dst, 2, 2);
print("获取的数据:"+new String(dst));
printProperty(buf);
print("******************************");
buf.reset();
printProperty(buf);
//判断缓冲区中是否还有数据
if(buf.hasRemaining()){
print("缓冲区中还可以获取的字节数:"+buf.remaining());
}
}
@Test
public void fun01(){
//1、获取指定大小的缓冲区
ByteBuffer buf = ByteBuffer.allocate(1024);
printProperty(buf);
print("******************************");
//2、put存取数据,写模式
buf.put("abcde".getBytes());
printProperty(buf);
//3、切换模式
buf.flip();
print("******************************");
//4、读模式
printProperty(buf);
byte[] dst=new byte[buf.limit()];
buf.get(dst);
print("获取到的数据:"+new String(dst));
print("******************************");
printProperty(buf);
//5、rewind();可重复读取数据
buf.rewind();
print("******************************");
printProperty(buf);
//6、清空缓冲区clear,但是缓冲区中的数据依然存在,处于被遗忘的状态
buf.clear();
print("依然有数据:"+(char)buf.get());
print("******************************");
printProperty(buf);
}
public void  printProperty(ByteBuffer buf){
print("position:"+buf.position());
print("limit:"+buf.limit());
print("capacity:"+buf.capacity());
}
public void print(Object o){
System.out.println(o);
}
}

NIO入门-----01的更多相关文章

  1. 第二章 NIO入门

    传统的同步阻塞式I/O编程 基于NIO的非阻塞编程 基于NIO2.0的异步非阻塞(AIO)编程 为什么要使用NIO编程 为什么选择Netty 第二章 NIO 入门 2.1 传统的BIO编程 2.1.1 ...

  2. Java NIO入门(二):缓冲区内部细节

    Java NIO 入门(二)缓冲区内部细节 概述 本文将介绍 NIO 中两个重要的缓冲区组件:状态变量和访问方法 (accessor). 状态变量是前一文中提到的"内部统计机制"的 ...

  3. Java NIO入门

    NIO入门 前段时间在公司里处理一些大的数据,并对其进行分词.提取关键字等.虽说任务基本完成了(效果也不是特别好),对于Java还没入门的我来说前前后后花了2周的时间,我自己也是醉了.当然也有涉及到机 ...

  4. 不用搭环境的10分钟AngularJS指令简易入门01(含例子)

    不用搭环境的10分钟AngularJS指令简易入门01(含例子) `#不用搭环境系列AngularJS教程01,前端新手也可以轻松入坑~阅读本文大概需要10分钟~` AngularJS的指令是一大特色 ...

  5. 【爬虫入门01】我第一只由Reuests和BeautifulSoup4供养的Spider

    [爬虫入门01]我第一只由Reuests和BeautifulSoup4供养的Spider 广东职业技术学院  欧浩源 1.引言  网络爬虫可以完成传统搜索引擎不能做的事情,利用爬虫程序在网络上取得数据 ...

  6. JavaScript基础入门 - 01

    JavaScript入门 - 01 准备工作 在正式的学习JavaScript之前,我们先来学习一些小工具,帮助我们更好的学习和理解后面的内容. js代码位置 首先是如何编写JavaScript代码, ...

  7. CSS3基础入门01

    CSS3 基础入门 01 前言 相对于css2来说,css3更新了很多的内容,其中包括选择器.颜色.阴影.背景.文本.边框.新的布局方案.2d.3d.动画等等. 而如果想要学习css3的诸多部分,不妨 ...

  8. Java基础语法入门01

    Java基础语法入门01 学习java你要先进行去了解JDK,JRE,JVM JDK Java开发工具包 JRE Java语言开发的运行环境 JVM Java虚拟机,用于Java语言的跨平台所用. 当 ...

  9. 【网络爬虫入门01】应用Requests和BeautifulSoup联手打造的第一条网络爬虫

    [网络爬虫入门01]应用Requests和BeautifulSoup联手打造的第一条网络爬虫 广东职业技术学院 欧浩源 2017-10-14  1.引言 在数据量爆发式增长的大数据时代,网络与用户的沟 ...

随机推荐

  1. 网站设计:将Footer固定在浏览器底部

    在设计网站的时候,如果你某个页面的内容没有满屏,那你的footer会离浏览器底部很远,整体看起来很难看,这里用JavaScript提供一种方法来将footer固定在浏览器底部. function fi ...

  2. 用java自制简易线程池(不依赖concurrent包)

    很久之前人们为了继续享用并行化带来的好处而不想使用进程,于是创造出了比进程更轻量级的线程.以linux为例,创建一个进程需要申请新的自己的内存空间,从父进程拷贝一些数据,所以开销是比较大的,线程(或称 ...

  3. SpringBoot中关于Shiro权限管理的整合使用

     转载:https://blog.csdn.net/fuweilian1/article/details/80309192 在整合Shiro的时候,我们先要确定一下我们的步骤: 1.加入Shiro的依 ...

  4. Liunx软件安装之JDK

    在安装 jdk 之前我们需要先了解下 openjdk 跟 oracle jdk 的区别. OpenJDK 是 JDK 的开源码版本,以 GP L 协议的形式发布.在 JDK7 的时候,OpenJDK ...

  5. Vmware启动ubuntu 出现错误。

    Vmware启动ubuntu 出现错误“以独占方式锁定此配置文件失败. 可能其它正在运行VMware进程在使用此配置文件”. 在网上查找了很多方法,法(1)试过在启动任务管理器中“结束与VMware有 ...

  6. Badboy参数化 - Add Variable(循环使用不同的关键字进行搜索)

    参考: http://leafwf.blog.51cto.com/872759/1113716 http://www.51testing.com/html/00/130600-1367743.html ...

  7. P3810 【模板】三维偏序(陌上花开)cdq分治

    传送门:https://www.luogu.org/problemnew/show/P3810 cdq分治的模板题,第一层外部排序,第二层cdq归并排序,这个时候不用考虑第一次的顺序,第三次用树状数组 ...

  8. codeforces 233 D. Table(思维+dp )

    题目链接:http://codeforces.com/contest/233/problem/D 题意:问在n*m的矩阵中满足在每一个n*n的矩阵里画k个点,一共有几种画法. 题解:其实这题挺简单的但 ...

  9. Codeforces Round #383 (Div. 2) C. Arpa's loud Owf and Mehrdad's evil plan(dfs+数学思想)

    题目链接:http://codeforces.com/contest/742/problem/C 题意:题目比较难理解,起码我是理解了好久,就是给你n个位置每个位置标着一个数表示这个位置下一步能到哪个 ...

  10. 实现一个基于码云Storage

    实现一个简单的基于码云(Gitee) 的 Storage Intro 上次在 asp.net core 从单机到集群 一文中提到存储还不支持分布式,并立了一个 flag 基于 github 或者 开源 ...