Java NIO指的是new IO ,相对OIO,也称non-blocking IO,对应四种基本IO类型中的IO多路复用,主要有有三大核心组件,Channel(管道),Buffer(缓冲区),selector(选择器)

基本操作流程

allcocate创建实例对象--》put写入数据--》flip切换到读取模式--》get读取数据--》clear切回写入模式,

如下注释:

package com.example.demo;

import java.nio.IntBuffer;

/**
* Created by Administrator on 2019/9/22.
*/
public class NioTest {
static IntBuffer intBuffer=null;
public static void main(String[] args) {
intBuffer=IntBuffer.allocate(20);//默认为写入模式
print();//创建缓冲区p:l:c 0:20:20 p为position l为limit c为capacity
put();//插入5个数
print();//p:l:c 5:20:20 写入模式下写入数据只是改变postition的值
get(2);//输出两个0
print();//p:l:c 7:20:20 没有切换模式的情况下,get也变为在末尾添加两个0 flip();//p:l:c 0:7:20 翻转,切换为读取模式
get(4); print();//p:l:c 4:7:20
get(2);
print();//p:l:c 6:7:20
// intBuffer.rewind() //倒带重读 p:l:c 0:7:20
clear();//p:l:c 0:20:20 切回写入模式,并清空
// compact();//p:l:c 1:20:20 切回写入模式,保留未读取的数据
print();
      }
public static void put(){
for (int i = 0; i < 5; i++) {
intBuffer.put(i);
}
System.out.println("putting data");
} public static void print(){
System.out.println("position=="+intBuffer.position());
System.out.println("limit=="+intBuffer.limit());
System.out.println("capacity=="+intBuffer.capacity());
}
public static void flip(){
intBuffer.flip();
System.out.println("flipping");
}
public static void clear(){
intBuffer.clear();
System.out.println("clearing the buffer");
}
public static void compact(){
intBuffer.compact();
System.out.println("compacting the buffer");
}
public static void get(int n){
System.out.println("starting to read");
for (int i = 0; i < n; i++) {
System.out.println("read data=="+intBuffer.get());
}
System.out.println("ending to read");
}
}

输出

position==0
limit==20
capacity==20
putting data
position==5
limit==20
capacity==20
starting to read
read data==0
read data==0
ending to read
position==7
limit==20
capacity==20
flipping
starting to read
read data==0
read data==1
read data==2
read data==3
ending to read
position==4
limit==7
capacity==20
starting to read
read data==4
read data==0
ending to read
position==6
limit==7
capacity==20
clearing the buffer
position==0
limit==20
capacity==20

NIO组件之buffer的更多相关文章

  1. Java NIO 三大组件之 Buffer

    NIO大三组件 之Buffer 一.什么是Buffer Buffer是用于特定原始类型的数据的容器. 它的实质就是一组数组,用于存储不同类型的数据. 二.缓冲区的类型 缓冲区类型除了Boolean值类 ...

  2. Java NIO Channel和Buffer

    Java NIO Channel和Buffer @author ixenos Channel和Buffer的关系 1.NIO速度的提高来自于所使用的结构更接近于OS执行I/O的方式:通道和缓冲器: 2 ...

  3. Java NIO中的Buffer 详解

    Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的.缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO ...

  4. NIO之缓冲区(Buffer)的数据存取

    缓冲区(Buffer) 一个用于特定基本数据类行的容器.有java.nio包定义的,所有缓冲区都是抽象类Buffer的子类. Java NIO中的Buffer主要用于与NIO通道进行交互,数据是从通道 ...

  5. NIO(一):Buffer缓冲区

    一.NIO与IO: IO:  一般泛指进行input/output操作(读写操作),Java IO其核心是字符流(inputstream/outputstream)和字节流(reader/writer ...

  6. nio之缓冲区(Buffer)理解

    一.缓冲区简介 Nio中的 Buffer 是用于存储特定基础类型的一个容器.为了能熟练的使用 Nio中的各种 Buffer , 我们需要理解 Buffer 中的 三个重要 的属性. 1. capaci ...

  7. Java I/O(3):NIO中的Buffer

    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 之前在调用Channel的代码中,使用了一个名叫ByteBuffer类,它是Buffer的子类.这个叫Buffer的类是专门用来解决高速设备与低 ...

  8. NIO 组件Buffer

    重要属性 属性 描述 Capacity 容量, 即可以容纳的最大数据量; 在缓冲区创建时被设定并且不能改变 Limit 表示缓冲区的当前终点, 不能对缓冲区超过极限的位置进行读写操作, 且极限是可以修 ...

  9. NIO三大组件之Buffer

    什么是Buffer Buffer(这里并不是特指Buffer类)是一个存储数据的容器,与数组类似(其实底层依旧是用数组的结构来存储数据),但不同的是,Buffer对象提供了一组更有效的方法去进行写入和 ...

随机推荐

  1. Java 判断是否为回文字符串

    回文字符串有两种:abcba,abccba. 代码: static boolean func(String str) { int len = str.length(); for (int i = 0; ...

  2. Laravel 向公共模板赋值

    开发过程中许多时候都会向公共模板赋值,比如顶部导航栏,页面底部等等,不可能在每个控制器中都赋值一遍. Laravel 中解决办法如下:修改 App\Providers\AppServiceProvid ...

  3. 循环 for 读取文件

    cat filename(待读取的文件) | while read line do echo $line done

  4. 牛客假日团队赛5J 护城河 bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘 (凸包的周长)

    链接:https://ac.nowcoder.com/acm/contest/984/J 来源:牛客网 护城河 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...

  5. itchat的使用

    python 微信接口 -- itchat 文档 发表于 2018-03-16 | 分类于 Python | itchat 一. 安装 $ pip install itchat 特殊的字典使用方式通过 ...

  6. 七、设备驱动中的阻塞与非阻塞 IO(二)

    7.2 轮询 7.2.1 介绍 在用户程序中的 select() 和 poll() 函数最终会使设备驱动中的 poll() 函数被执行. 设备驱动程序中的轮询函数原型: /** 用于询问设备是否可以非 ...

  7. Codeforces Round #593 (Div. 2) C. Labs

    题目:https://codeforces.com/contest/1236/problem/C 思路:将 n ^ 2 个 lab 平分为 n 个 group group A 和 B 组成的 有序对 ...

  8. 利用urllib.urlopen向有道翻译发送数据获得翻译结果

    from urllib import request,parseimport requests, sys,ssl,json ssl._create_default_https_context = ss ...

  9. java选做猜数字

    程序设计思想 第一步:使用随机数生成1-100的数字 第二步:让用户输入数字 第三步:输入的数字与生成数字不同执行下一步,相同执行第五步 第四步:比较两数大小并输出结果,并返回第二步 第五步:输出猜对 ...

  10. tar命令--数据归档(一)

    虽然zip命令能够很好的将数据压缩和归档到单个文件,蛋挞不是linux 和unix的标准归档工具. ta命令最开始是用来将文件写到磁盘设备上的归档.然而他也能把输出写道文件里. 你会发现这个可选参数是 ...