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

简介: package nio;import java.nio.ByteBuffer;import org.junit.Test;public class buffer { @Test public vo...
package nio;

import java.nio.ByteBuffer;

import org.junit.Test;

public class buffer {
    @Test
    public void test1(){
        String str="abc";
        //1、分配指定大小的缓冲区
        ByteBuffer buf = ByteBuffer.allocate(1024);
        System.out.println("---------allocate()----------");
        System.out.println(buf.position());   //位置
        System.out.println(buf.limit());      //界限
        System.out.println(buf.capacity());   //容量
        //2、利用put() 存入数据到缓冲区中
        buf.put(str.getBytes());
        System.out.println("---------put()写数据模式----------");
        System.out.println(buf.position());   //位置
        System.out.println(buf.limit());      //界限
        System.out.println(buf.capacity());   //容量
        //3、切换成读取数据的模式
        buf.flip();
        System.out.println("---------flip() 切换到读数据模式----------");
        System.out.println(buf.position());   //位置
        System.out.println(buf.limit());      //界限
        System.out.println(buf.capacity());   //容量
        //4、利用get读取缓冲区中的数据
        byte[] dst=new byte[buf.limit()];
        buf.get(dst);
        System.out.println(new String(dst,0,dst.length));
        System.out.println("---------get()读取缓冲区的数据----------");
        System.out.println(buf.position());   //位置
        System.out.println(buf.limit());      //界限
        System.out.println(buf.capacity());   //容量
        //5、rewind() : 可重复读
        buf.rewind();
        System.out.println("---------rewind()----------");
        System.out.println(buf.position());   //位置
        System.out.println(buf.limit());      //界限
        System.out.println(buf.capacity());   //容量
        //6、清空缓冲区,但是缓冲区里面的数据还在,只不过这些数据处于“被遗忘”状态
        buf.clear();
        System.out.println("---------clear()----------");
        System.out.println(buf.position());   //位置
        System.out.println(buf.limit());      //界限
        System.out.println(buf.capacity());   //容量
        System.out.println((char)buf.get());
    }

    @Test
    public void test2(){
        String str="abcde";
        ByteBuffer buf = ByteBuffer.allocate(1024);
        buf.put(str.getBytes());
        buf.flip();   //切换成读取数据的模式
        byte[] dst=new byte[buf.limit()];
        buf.get(dst,0,2);
        System.out.println(new String(dst,0,2));
        System.out.println(buf.position());   //位置
        buf.mark();  //mark标记当前position的位置
        buf.get(dst,2,2);
        System.out.println(new String(dst,2,2));
        System.out.println(buf.position());   //位置
        buf.reset(); // 恢复到mark的位置
        System.out.println(buf.position());
        //判断缓冲区中是否还有可以操作的数据
        if(buf.hasRemaining()){
            //获取缓冲区中可以操作的数据的数量
            System.out.println(buf.remaining());
        }
    }
}
目录
相关文章
|
6月前
|
存储 编解码 移动开发
技术笔记:NIO流—理解Buffer、Channel概念和NIO的读写操作
技术笔记:NIO流—理解Buffer、Channel概念和NIO的读写操作
42 1
|
2月前
|
Java
让星星⭐月亮告诉你,Java NIO之Buffer详解 属性capacity/position/limit/mark 方法put(X)/get()/flip()/compact()/clear()
这段代码演示了Java NIO中`ByteBuffer`的基本操作,包括分配、写入、翻转、读取、压缩和清空缓冲区。通过示例展示了`position`、`limit`和`mark`属性的变化过程,帮助理解缓冲区的工作原理。
33 2
|
7月前
|
Java 索引
📌 Java NIO Buffer
Java NIO缓冲区在与NIO通道交互时使用。数据从通道读取到缓冲区,然后从缓冲区写入通道。 缓冲区本质上是一块内存,可以在其中写入数据,然后再进行读取。这个内存块被封装在一个NIOBuffer对象中,该对象提供了一组方法,可以更容易地使用内存块。
|
7月前
|
编解码 网络协议
Netty基础篇:NIO中缓冲区设置太小
Netty基础篇:NIO中缓冲区设置太小
|
7月前
|
存储 网络协议 Java
NIO - 基础入门之通道和缓冲区
NIO - 基础入门之通道和缓冲区
89 0
|
存储 网络协议 Java
Netty入门到超神系列-Java NIO 三大核心(selector,channel,buffer)
选择器,也叫多路复用器,Java的NIO通过selector实现一个线程处理多个客户端链接,多个channel可以注册到同一个Selector,Selector能够监测到channel上是否有读/写事件发生,从而获取事件和对事件进行处理,所以Selector切到哪个channel是由事件决定的。当线程从某个客户端通道未读取到数据时,可以把空闲时间用来做其他任务,性能得到了提升。
159 0
|
弹性计算 Java API
Netty入门到超神系列-Java NIO 三大核心(selector,channel,buffer)
理解Selector 和 Channel Selector 选择器,也叫多路复用器,可以同时处理多个客户端连接,多路复用器采用轮询机制来选择有读写事件的客户端链接进行处理。 通过 Selector ,一个 I/O 线程可以并发处理 N 个客户端连接和读写操作,这解决了传统同步阻塞 I/O 一连接一线程模型,架构的性能、弹性伸缩能力和可靠性都得到了极大的提升。 由于它的读写操作都是非阻塞的,这就可以充分提升 IO 线程的运行效率,避免由于频繁 I/O 阻塞导致的线程挂起。
261 0
|
Java
NIO的基本概念和缓冲区
NIO的基本概念和缓冲区
67 0
|
存储 Java
NIO之Buffer解读(下)
NIO之Buffer解读(下)
|
5月前
|
Java 大数据
解析Java中的NIO与传统IO的区别与应用
解析Java中的NIO与传统IO的区别与应用