java.nio.ByteBuffer 学习笔记

这篇具有很好参考价值的文章主要介绍了java.nio.ByteBuffer 学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

java 重复使用bytebuffer例子:

java验证flip函数:

flip讲解

以下内容转自:

java.nio.ByteBuffer


java 重复使用bytebuffer例子:

import java.nio.ByteBuffer;

public class ByteBufferExample {
    public static void main(String[] args) {
        ByteBuffer buffer = ByteBuffer.allocateDirect(1024); // 创建直接字节缓冲区

        for (int i = 0; i < 10; i++) {
            String data = "Data " + i;
            buffer.put(data.getBytes()); // 写入数据
            buffer.flip(); // 转换为读模式

            nativeMethod(buffer); // 调用本地方法

            buffer.clear(); // 清空缓冲区,准备下一轮写入
        }
    }

    public static native void nativeMethod(ByteBuffer buffer); // 本地方法声明
}

java验证flip函数:

import java.nio.ByteBuffer;

public class Main {
    public static void main(String[] args) {
        ByteBuffer buffer = ByteBuffer.allocate(10);

        System.out.println("Initial capacity: " + buffer.capacity()); // Prints: 10
        System.out.println("Initial limit: " + buffer.limit()); // Prints: 10
        System.out.println("Initial position: " + buffer.position()); // Prints: 0
        System.out.println("Initial remaining: " + buffer.remaining()); // Prints: 10

        buffer.put((byte) 123); // Write a byte into the buffer

        System.out.println("After putting a byte, remaining: " + buffer.remaining()); // Prints: 9

        buffer.flip(); // Switch to read mode

        System.out.println("After flipping, remaining: " + buffer.remaining()); // Prints: 1
    }
}

flip讲解

以下内容转自:

https://www.cnblogs.com/chdf/p/11466522.html

java.nio.ByteBuffer

1. ByteBuffer中的参数position、limit、capacity、mark含义:

position:表示当前指针的位置(下一个要操作的数据元素的位置)

limit:表示当前数组最大的使用量,即有效位置的EOF位置(缓冲区数组中不可操作的下一个元素的位置,limit<=capacity)

capacity:表示缓冲区最大容量(缓冲区数据的总长度)

mark:用于记录当前position的前一个位置或者默认是-1

2. ByteBuffer中常用方法含义:

reset():把position设置为mark的值,相当于之前做过一个标记,现在回退到之前标记的地方。

clear():将参数设置为position=0,limit=capacity,mark=-1,类似于初始化,但并不影响底层byte数组的内容(注意:clear只是把指针移到位置0,并没有真正清空数据)。

flip():将参数设置为limit=position,position=0,mark=-1,翻转,即将未翻转之前0到position之间的数据放置到翻转之后的position(即0)到limit之间的这块区域,翻转将缓冲区的状态由存数据变为准备取数据(注意:将当前位置设置为EOF,指针位置指向0)。

rewind():将参数设置为position=0,mark=-1,limit的值不变(注意:指针指向0)。

remaining():return limit - position,即返回limit和position之间的相对位置差。

hasRemaining():return position < limit,即返回是否还有未读内容。

compact():将position与limit之间的内容移到0与(limit - position)之间的区域,position的值变为limit - position,limit的值变为capacity;如果先将position的设置到limit,再执行compact操作,就相当于clear操作(注意:compact表示压缩数据,例如当前EOF是6,当前指针指向2即下标0、1位置的数据已经写出,此时执行compact方法就是将下标2、3、4、5的数据移动到下标0、1、2、3的位置,指针指向下标4的位置,然后从4的位置继续写入数据。写完后,把指针移动到0,再写出,然后再执行compact操作,如此反复......)。

示例:初始化一个ByteBuffer,缓冲区最大容量为10,开始指针指向下标0即position=0。

   然后写入6字节数据,写入完成后下标0、1、2、3、4、5位置有实际写入的数据,下标6、7、8、9位置为默认值0。

   此时,指针指向6,即position=6,limit(6)方法会将当前位置设为EOF位置。

   最后,读取数据时读取到EOF位置就会结束。文章来源地址https://www.toymoban.com/news/detail-683287.html

到了这里,关于java.nio.ByteBuffer 学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《Java Web轻量级整合开发入门》学习笔记

    轻量级Java Web整合开发 第一章 轻量级Java Web开发概述 1.2  java web 开发概述 1.JSP是一种编译执行的前台页面技术。对于每个JSP页面,Web服务器都会生成一个相应的Java文件,然后再编译该Java文件,生成相应的Class类型文件。在客户端访问到的JSP页面,就是相应Class文件执行的结果

    2024年02月08日
    浏览(58)
  • web开发学习笔记(8.java web后端开发基础知识)

    1.使用spring开发的优势,spring发展到今天已经形成了一种开发生态圈,提供了若干个子项目,每个项目用于完成特定的功能。使用spring全家桶,可以做到很多事情,可以很方便的套用很多的组件。 2.pom构成 指定父工程 指定web构件 指定springboot打包控件 3.启动类的写法 4.contro

    2024年01月18日
    浏览(65)
  • Java企业级开发学习笔记(2.1)MyBatis实现简单查询

    零、创建数据库与表 在Navicat里创建MySQL数据库testdb 创建用户表 - t_user CREATE TABLE t_user ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(50) DEFAULT NULL, age int(11) DEFAULT NULL, address varchar(255) DEFAULT NULL, PRIMARY KEY ( id ) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; 执行SQL语句来创建用户表 INSERT IN

    2024年02月09日
    浏览(89)
  • 【JAVA学习笔记】 56 - 开发中如何选择集合实现类,以及Collection工具类

    https://github.com/yinhai1114/Java_Learning_Code/blob/main/IDEA_Chapter14/src/com/yinhai/Collections_.java 目录 项目代码 Collections工具类 一、Collections工具类介绍 1.排序操作: (均为static方法) 2.查找、替换 在开发中,选择什么集合实现类,主要取决于业务操作特点,然后根据集合实现类特性进行 选择

    2024年02月06日
    浏览(42)
  • Java企业级开发学习笔记(4.4)Spring Boot加载自定义配置文件

    创建 Spring Boot 项目 单击【创建】按钮 在 resources 里创建 myconfig.properties 文件 设置文件编码 设置学生的四个属性值 在 cn.kox.boot 包里创建config子包,在子包里创建 StudentConfig 打开自带的测试类 ConfigDemo01ApplicationTests 注入学生配置实体,创建 testStudentConfig() 测试方法,在里面输

    2024年02月08日
    浏览(48)
  • Java企业级信息系统开发学习笔记(4.2)Spring Boot项目单元测试、热部署与原理分析

    该文章主要为完成实训任务,详细实现过程及结果见【http://t.csdn.cn/pG623】 1. 添加测试依赖启动器和单元测试 修改pom.xml文件,添加依赖 刷新项目依赖 2. 创建测试类与测试方法 在 src/test/java 里创建 cn.kox.boot 包,创建测试类 TestHelloWorld01 给测试类添加测试启动器注解与Spring

    2024年02月10日
    浏览(57)
  • Java NIO (三)NIO Channel类

            前面提到,Java NIO中一个socket连接使用一个Channel来表示。从更广泛的层面来说,一个通道可以表示一个底层的文件描述符,例如硬件设备、文件、网络连接等。然而,远不止如此,Java NIO的通道可以更加细化。例如,不同的网络传输协议,在Java中都有不同的NIO Chann

    2024年01月18日
    浏览(49)
  • Android 开发笔记2.0

    本文主要记录一些在开发过程中可能要用到的知识点,持续更新哦!2.0正式上线 目录: git clone URL之后想切换远程分支只需要git checkout 分支就行,不用再-b了。 个别手机在锁屏页点击三个功能入口无效,原因:非Activity启动Activity需要加上标记为NEW_TASK。 3.ViewPager 中的 Fragme

    2024年02月10日
    浏览(35)
  • Android开发笔记

    1、Notification 通知的创建流程 1)创建一个NotificationManager,获取系统服务,getSystemService()方法; 2)使用Builder构造器来创建Notification对象,设置通知的各种属性; 3)NotificationChannel 通知渠道,Android8.0引入了通知渠道,允许为要显示的每种通知类型创建用户可自定义的渠道;

    2024年02月16日
    浏览(26)
  • Android开发笔记(三)—Activity篇

    (1)从当前页面跳到新页面: startActivity(new Intent(源页面.this,目标页面.class)) (2)从当前页面回到上一个页面,相当于关闭当前页面: finish() onCreate:创建活动。把页面布局加载到内存,进入了初始状态。 onStart:开始活动。把活动页面显示在屏幕上,进入了就绪状态。 on

    2024年02月06日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包