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: 10System.out.println("Initial limit: " + buffer.limit()); // Prints: 10System.out.println("Initial position: " + buffer.position()); // Prints: 0System.out.println("Initial remaining: " + buffer.remaining()); // Prints: 10buffer.put((byte) 123); // Write a byte into the bufferSystem.out.println("After putting a byte, remaining: " + buffer.remaining()); // Prints: 9buffer.flip(); // Switch to read modeSystem.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位置就会结束。
相关文章:
java.nio.ByteBuffer 学习笔记
目录 java 重复使用bytebuffer例子: java验证flip函数: flip讲解 以下内容转自: java.nio.ByteBuffer java 重复使用bytebuffer例子: import java.nio.ByteBuffer;public class ByteBufferExample {public static void main…...
自动化实时在线静电监控系统的构成
自动化实时在线静电监控系统是一种帮助企业监测和管理静电问题的技术解决方案。静电在许多工业和商业环境中都是一个潜在的风险和生产问题。通过使用这样的监控系统,企业可以及时发现并采取对策来预防或减轻可能的静电问题。 该系统通常由以下组成部分构成…...
Windows 转 mac 记录
初次从Windows转mac可能会不适应,建议先看看 【6分钟搞定MacBook】不懂时无所适从,学会后越用越爽!_哔哩哔哩_bilibili 我主要是做一些补充记录 1、Windows的右键等于mac的双击触控板、control单击触控板 2、运行中的应用下方会有一个点&…...
Linux_4_文本处理工具和正则表达式
目录 1文本编辑工具之神VIM1.1 vi和vim简介1.2使用vim1.2.1 vim 命令格式1.2.2三种主要模式和转换 1.3扩展命令模式1.3.1扩展命令模式基本命令1.3.2 地址定界1.3.3查找并替换1.3.4定制vim的工作特性1.3.4.1行号1.3.4.2忽略字符的大小写1.3.4.3白动缩进1.3.4.4复制粘贴保留格式1…...
[Unity]VSCode无代码提示
查看vscode的output窗口,提示加载 csproj 文件失败 It need be converted to new SDK style to work in C# Dev Kit. 把unity的PackageManager里的 Visual Studio Editor 版本升级到2.0.20或以上,重新生成csproj文件就好了。 参考vscode官方ÿ…...
画流程图都可以用哪些工具?
在日常生活中,我相信我们很多人都看到过流程图。对于设计师来说,它还需要涉及流程图来反映用户的旅程和交互方式。那么你知道哪些流行的流程图设计软件呢?作为高级设计师,我今天推荐10款流程图设计软件。你可以和我一起读这篇文章…...
Elasticsearch中倒排索引、分词器、DSL语法使用介绍
🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…...
rabbitmq笔记-rabbitmq进阶-数据可靠性,rabbitmq高级特性
消息何去何从 mandatory和immediate是channel.basicPublish方法的两个参数,都有消息传递过程中不可达目的地时将消息返回给生产者的功能。 mandatory参数 true:交换器无法根据自身的类型 和路由键找到符合条件的队列,rabbitmq调用Basic.Re…...
【笔记】判断两个String字符串是否相同(考虑字符串为null的情况)
判断两个字符串是否相同,可用于判断一个字段在逻辑处理前后,值是否有变化。 其中重点是要考虑两个字符串是否有为null的情况,如果其中一个,或者两个都为空,用str1.equals(str2)直接判断,就会报NullPointer…...
【校招VIP】java语言考点之多线程NIO
考点介绍 多线程&NIO考点是校招面试中的常制点之一。 Java NIO是new IO的简称,是一种可以替代Java 10的一套新的IO机制。它提供了一套不同于Java标准1O的操作机制,严格来说,NIO与并发并无直接关系,但是使用NIO技术可以大大提高…...
JVM知识点(一)
1、JVM基础概念 (1)JVM、JRE、JDK JRE:JVM基本类库组成的运行环境就是JRE。JVM自己是无法完成一次编译,处处运行的,需要有一个基本类库告诉JVM如何操作运行,如如何操作文件,连接网络等&#x…...
网页接口导入postman进行接口请求
postman版本:v10.17.4 一、拷贝接口信息 网页打开开发者工具-networkk,在网页上请求一次接口,鼠标指在接口上,点击鼠标右键-copy-copy as cURL(bash) 二、导入postman 打开postman,点击import-Raw text,…...
【Leetcode】124.二叉树中的最大路径和(Hard)
一、题目 1、题目描述 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root ,返回其…...
django自动创建model数据
目前使用的环境:django4.2.3,python3.10 django通过一些第三方库,可以轻易的自动生成一系列的后台数据。 首先先创建一个数据库: 然后,在setting.py中就可以指定我们新创建的数据库了。 DATABASES {default: {ENGI…...
vscode 远程连接
这里记录的是修改ssh配置文件的方式远程连接服务器中的docker服务器 假如已经创建好了docker,并已经启动 1. config ssh in dev container 在/etc/ssh/sshd_config中修改 PermitRootLogin in 把 PermitRootLogin prohibit-password 修改为 PermitRootLogin yes …...
Error running ‘Tomcat 8.5.29‘ Address localhost:1099 is already in use
一、Error running ‘Tomcat 8.5.29’ Address localhost:1099 is already in use 原因:端口1099被占用了。 二、解决 2.1 解决方法一-结束该端口1099占用 //1-查看端口占用,根据端口号1099,获取PID(进程ID) netstat -ano | findstr "…...
后端面试话术集锦第 七 篇:nginx面试话术
🚗后端面试集锦目录 💖后端面试话术集锦第 1 篇:spring面试话术💖 💖后端面试话术集锦第 2 篇:spring boot面试话术💖 💖后端面试话术集锦第 3 篇:spring cloud面试话术💖 💖后端面试话术集锦第 4 篇:ElasticSearch面试话术💖 💖后端面试话术集锦第 5 …...
leetcode算法题--使子序列的和等于目标的最少操作次数
原题链接:https://leetcode.cn/problems/minimum-operations-to-form-subsequence-with-target-sum/description/ 视频讲解:https://www.bilibili.com/video/BV1Em4y1T7Bq?t1456.1 这题是真的难。。 func minOperations(nums []int, target int) int…...
服务器部署前后端项目-SQL Father为例
hello~大家好哇,好久没更新博客了。现在来更新一波hhh 现在更新一下部署上的一些东西,因为其实有很多小伙伴跟我之前一样,很多时候只是开发了,本地前后端都能调通,也能用,但是没有部署到服务器试过&#x…...
LiveNVR监控流媒体Onvif/RTSP功能-支持语音对讲支持非国标摄像头SDK语音对讲GB28181级联国标平台非国标转国标语音对讲
LiveNVR支持语音对讲支持非国标摄像头SDK语音对讲GB28181级联国标平台非国标转国标语音对讲 1、确认摄像头是否支持对讲2、摄像头视频类型复合流3、通道配置SDK接入4、视频广场点击播放5、相关问题5.1、如何配置通道获取直播流?5.2、如何GB28181级联国标平台&#x…...
暗黑3终极按键助手:5分钟学会解放双手的完整指南
暗黑3终极按键助手:5分钟学会解放双手的完整指南 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 还在为暗黑破坏神3中繁琐的按键操作而烦…...
Tailwind CSS在Vue3+Vite项目中的实战应用:从零到响应式按钮
Tailwind CSS在Vue3Vite项目中的实战应用:从零到响应式按钮 如果你正在使用Vue3和Vite构建现代Web应用,却对传统CSS的维护成本感到头疼,那么Tailwind CSS可能会成为你的新宠。这个实用优先的CSS框架彻底改变了我们编写样式的方式——不再需要…...
虚幻引擎C++实战:用TSharedPtr管理资源时90%人会犯的3个内存错误
虚幻引擎C实战:用TSharedPtr管理资源时90%人会犯的3个内存错误 在虚幻引擎的C开发中,智能指针系统是资源管理的核心工具之一。TSharedPtr作为UE提供的引用计数智能指针,其设计初衷是为了简化内存管理,但实际开发中却常常成为内存泄…...
SD卡 vs SD NAND:SPI模式下性能对比与选型建议(含实测数据)
SD卡 vs SD NAND:SPI模式下性能对比与选型建议(含实测数据) 在智能硬件和消费电子产品的开发过程中,存储方案的选择往往成为硬件工程师面临的关键决策之一。面对市场上琳琅满目的存储器件,如何在性能、成本和可靠性之…...
Notion-Enhancer模块注册表:扩展发现、加载和管理的完整机制
Notion-Enhancer模块注册表:扩展发现、加载和管理的完整机制 【免费下载链接】notion-enhancer an enhancer/customiser for the all-in-one productivity workspace notion.so 项目地址: https://gitcode.com/gh_mirrors/no/notion-enhancer Notion-Enhance…...
Remotely远程控制会话录制:完整监控与分析指南
Remotely远程控制会话录制:完整监控与分析指南 【免费下载链接】Remotely A remote control and remote scripting solution, built with .NET 7, Blazor, and SignalR. 项目地址: https://gitcode.com/gh_mirrors/re/Remotely Remotely是一款基于.NET、Blaz…...
Swagger2配置避坑指南:为什么你的Docket分组设置会导致api-docs 404?
Swagger2配置避坑指南:为什么你的Docket分组设置会导致api-docs 404? 在RESTful API开发中,Swagger2作为API文档生成工具被广泛使用。但许多开发者在配置过程中都遇到过这样的问题:明明能正常访问swagger-ui.html页面,…...
Minikube国内环境配置全攻略:从安装到Dashboard镜像加速(含阿里云镜像源)
Minikube国内环境高效配置指南:从零搭建到Dashboard可视化 对于国内开发者而言,在本地环境中快速搭建Kubernetes学习平台往往面临镜像拉取缓慢甚至失败的困扰。本文将系统性地介绍如何利用Minikube在国内网络环境下构建稳定的单机Kubernetes环境…...
知识蒸馏(Knowledge Distillation, KD)详细介绍
知识蒸馏(Knowledge Distillation, KD)详细介绍 目录 概述基本概念知识蒸馏的核心思想蒸馏过程知识类型损失函数架构设计应用场景优化策略挑战与局限最新进展总结 概述 知识蒸馏(Knowledge Distillation, KD)是一种模型压缩和…...
Materialize:智能PBR材质转化引擎赋能3D创作流程重构
Materialize:智能PBR材质转化引擎赋能3D创作流程重构 【免费下载链接】Materialize Materialize is a program for converting images to materials for use in video games and whatnot 项目地址: https://gitcode.com/gh_mirrors/mate/Materialize 在3D内容…...
