重温java知识(四十、网络编程之五:NIO之二:Buffer)

缓冲区(Buffer)是一个线性的、有序的数据集,一个缓冲区只能够容纳一种数据类型。该类定义如下:

public abstract class Buffer extends Object{}

Buffer是一个抽象类,所以提供了一个缓存操作的标准。如果要保存不同的数据类型,则应该使用Buffer的不同子类,常见的子类有:

  • ByteBuffer
  • CharBuffer
  • ShortBuffer
  • IntBuffer
  • LongBuffer
  • FloatBuffer
  • DoubleBuffer

在Buffer中存在一系列的状态变量,这些状态变量随着写入或读取都有可能会被改变。在缓冲区可以使用3个值表示缓冲区的状态:

  • position:表示下一个缓冲区读写获取或写入的操作指针,每向缓冲区中写入数据的时候此指针就会改变,指针永远放到写入的最后一个元素后,即如果写入了4个位置的数据,则position就会指向第五个位置。
  • limit:表示还有多少数据需要存储或读取,position<=limit。
  • capacity:表示缓冲区的最大容量,limit<=capacity。此值在分配缓冲区时被设置,一般不会更改。

1、观察缓冲区的使用的例子:

package com.mydemo;

import java.nio.ByteBuffer;

public class NIOBufferDemo {

    public static void main(String[] args) {

        // 定于操作数据,长度为13
        String str = "uchihayuusuke";

        // 创建缓冲区,容量为20
        ByteBuffer byteBuffer = ByteBuffer.allocate(20);

        // 没有存放数据时的参数:
        System.out.println("【1-创建缓冲区】没有存放数据:capacity = " + byteBuffer.capacity() +
                "、 limit = " + byteBuffer.limit() +
                "、 position" + byteBuffer.position());

        System.out.println("------------------------");

        // 缓冲区存放数据
        byteBuffer.put(str.getBytes());

        // 存放数据时的参数:
        System.out.println("【2-存放数据】保存数据:capacity = " + byteBuffer.capacity() +
                "、 limit = " + byteBuffer.limit() +
                "、 position" + byteBuffer.position());
        System.out.println("------------------------");

        // 准备输出
        byteBuffer.flip();

        // 存放数据时的参数:
        System.out.println("【3-重置缓冲区】保存数据:capacity = " + byteBuffer.capacity() +
                "、 limit = " + byteBuffer.limit() +
                "、 position" + byteBuffer.position());
        System.out.println("------------------------");

        // 缓冲区中是否有数据
        while (byteBuffer.hasRemaining()){
            // 返回字节数据
            System.out.print(byteBuffer.get() + "、");
        }
        System.out.println();
        System.out.println("------------------------");

        // 清空缓冲区
        byteBuffer.clear();
// 存放数据时的参数:
        System.out.println("【4-清空缓冲区】保存数据:capacity = " + byteBuffer.capacity() +
                "、 limit = " + byteBuffer.limit() +
                "、 position" + byteBuffer.position());
    }

}

运行结果:
【1-创建缓冲区】没有存放数据:capacity = 20、 limit = 20、 position0
------------------------2-存放数据】保存数据:capacity = 20、 limit = 20、 position13
------------------------3-重置缓冲区】保存数据:capacity = 20、 limit = 13、 position0
------------------------
1179910410510497121117117115117107101------------------------4-清空缓冲区】保存数据:capacity = 20、 limit = 20、 position0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值