java.nio.Buffer 中的 flip()方法

手把手教你逆向分析某里系bx-ua参数(以225版本为例) 本文详细解析了某里系应用bx-ua参数的逆向工程实战方法,重点拆解其三层加密体系(二进制加密、字符替换和Base64编码)。通过工具链配置和实战案例,帮助开发者掌握逆向分析技巧,适用于合法合规的安全研究和加密技术评估场景。 阅读详情

java.nio.Buffer 中的 flip()方法

2016年11月11日 16:29:15 牧_风 阅读数:9113 标签: javanioBufferflip更多

个人分类: Java NIO编程(Netty框架)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/hbtj_1216/article/details/53129588

在Java NIO编程中,对缓冲区操作常常需要使用  java.nio.Buffer中的 flip()方法。

  Buffer 中的 flip() 方法涉及到 Buffer 中的capacity、position、limit三个概念。

       capacity:在读/写模式下都是固定的,就是我们分配的缓冲大小(容量)。

       position:类似于读/写指针,表示当前读(写)到什么位置。

       limit:在写模式下表示最多能写入多少数据,此时和capacity相同。在读模式下表示最多能读多少数据,此时和缓存中的实际

                   数据大小相同。

 

flip():Buffer有两种模式,写模式和读模式。在写模式下调用flip()之后,Buffer从写模式变成读模式。      

那么limit就设置成了position当前的值(即当前写了多少数据),postion会被置为0,以表示读操作从缓存的头开始读,mark置为-1。

也就是说调用flip()之后,读/写指针position指到缓冲区头部,并且设置了最多只能读出之前写入的数据长度(而不是整个缓存的容量大小)。

flip()源码:

 
  1. public final Buffer flip() {

  2. limit = position;

  3. position = 0;

  4. mark = -1;

  5. return this;

  6. }


实例代码(借用Java编程思想P552的代码): 

 

 
  1. package cn.com.newcom.ch18;

  2.  
  3. import java.io.FileInputStream;

  4. import java.io.FileOutputStream;

  5. import java.io.RandomAccessFile;

  6. import java.nio.ByteBuffer;

  7. import java.nio.channels.FileChannel;

  8.  
  9. /**

  10. * 获取通道

  11. *

  12. * @author zhq

  13. *

  14. */

  15. public class GetChannel {

  16. private static final int SIZE = 1024;

  17.  
  18. public static void main(String[] args) throws Exception {

  19. // 获取通道,该通道允许写操作

  20. FileChannel fc = new FileOutputStream("data.txt").getChannel();

  21. // 将字节数组包装到缓冲区中

  22. fc.write(ByteBuffer.wrap("Some text".getBytes()));

  23. // 关闭通道

  24. fc.close();

  25.  
  26. // 随机读写文件流创建的管道

  27. fc = new RandomAccessFile("data.txt", "rw").getChannel();

  28. // fc.position()计算从文件的开始到当前位置之间的字节数

  29. System.out.println("此通道的文件位置:" + fc.position());

  30. // 设置此通道的文件位置,fc.size()此通道的文件的当前大小,该条语句执行后,通道位置处于文件的末尾

  31. fc.position(fc.size());

  32. // 在文件末尾写入字节

  33. fc.write(ByteBuffer.wrap("Some more".getBytes()));

  34. fc.close();

  35.  
  36. // 用通道读取文件

  37. fc = new FileInputStream("data.txt").getChannel();

  38. ByteBuffer buffer = ByteBuffer.allocate(SIZE);

  39. // 将文件内容读到指定的缓冲区中

  40. fc.read(buffer);

  41. buffer.flip();// 此行语句一定要有

  42. while (buffer.hasRemaining()) {

  43. System.out.print((char) buffer.get());

  44. }

  45. fc.close();

  46. }

  47. }

  注意:buffer.flip();一定得有,如果没有,就是从文件最后开始读取的,当然读出来的都是byte=0时候的字符。通过buffer.flip();这个语句,就能把buffer的当前位置更改为buffer缓冲区的第一个位置。

 

生信实战:用bcftools玩转VCF文件处理(从压缩到注释全流程) 本文详细介绍了使用bcftools处理VCF文件的全流程实战指南。从数据准备、压缩索引、信息提取、质量统计到核心的变异过滤与功能注释,手把手教你高效管理基因组变异数据。重点阐述了如何利用bcftools进行VCF文件注释,整合外部数据库信息,为变异位点添加关键的生物学标签,是生物信息学数据分析的必备技能。 阅读详情

相关推荐

CCS8.1 导入CCS3.3工程方法

    CCS3.3作为开发人员使用最广开发工具,研究人员手上存在不少该版本的建立的程序版本,然而随着TI公司推出高级版本的CCS平台,在新的平台上集成了更加丰富的功能和优点。利用新版本的平台在开发和编译旧版本工程上可以节省大量时间和精力。在使用新版本开发3.3版本工程时,首要解决的就是加载3.3的工程文件,现将加载过程记录如下: 第一步:Project->Import Legacy CC...

1万+

Java的buffer.flip()是个什么东西?

Java的buffer.flip()是个什么东西?

liuruiaaa的博客 1167

东方财富网API接口逆向分析:手把手教你破解那个带jQuery回调的股票数据接口

本文详细解析了东方财富网股票数据API接口的逆向工程实战技巧,重点介绍了JSONP接口的核心机制、参数解析及数据处理方法。通过Python代码示例演示了如何构造请求、处理分页数据及应对反爬策略,帮助开发者高效获取股票数据。文章还提供了完整的爬虫实现案例和常见问题排查指南。

weixin_30790841的博客 715

缓冲区的flip

总结一下,流是随着时间产生的数据。数据抽象成流,是因为客观世界存在着这样的现象。数据被抽象成流之后,我们不需要把所有的数据都读取到内存当中进行计算和迭代,而是每次处理或者计算一个缓冲区的数据。缓冲区的作用是缓冲,它在高频的 I/O 操作中很有意义。针对不同场景,也不只有这一种缓冲区的设计,比如用双向链表实现队列(FIFO 结构)可以作为缓冲区;Redis 中的列表可以作为缓冲区;RocketMQ,Kafka 等也可以作为缓冲区。

qq_37247026的博客 706

android广告SDK原理详解(附源码)

广大的开发者吃糠咽菜开发了一两款APP,获取了一些流量后自然就会想到流量变现,一般情况下大家会选择到百度联盟或者Google Admob这些广告服务提供商注册开发者账号,在自己的APP里面加上几行广告位代码,集成他们的广告SDK包。然后谋事在人,成事在天,只有每天看报表查查收益。   也有一些开发者为了能够提高自己的变现水平,同时接入了好几家的sdk,哪家出的收益高一点我就出哪家的广告,但是这

rmcgogo的博客 1万+

PID不够用?试试用ADRC改造你的ArduCopter:从Simulink仿真到SITL测试全记录

本文详细介绍了如何将ADRC(自抗扰控制)算法集成到ArduPilot飞控中,以替代传统PID控制器。通过Simulink建模、参数整定和SITL仿真测试,展示了ADRC在抗扰动能力、响应速度和参数调节复杂度上的优势,特别适合无人机在强风扰动下的稳定控制。

weixin_32349093的博客 273

NIO中Buffer常用flip()方法

我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。还有专门针对JVM、SPringBoot、SpringCloud、数据库、Linux、缓存、消息中间件、源码等相关面试题。《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

2401_83641443的博客 1368

AD9361 FIR 滤波器设计

matlab 得到滤波器系数

weixin_44630490的博客 1万+

java.nio.Buffer flip()方法

今天在看《Java编程思想》的时候,碰到java.nio.Buffer flip()方法,不明白是干什么用的,于是就赶快查看中文API,API上面翻译的是:"反转此缓冲区。首先对当前位置设置限制,然后将该位置设置为零。如果已定义了标记,则丢弃该标记。";     说实话,看了几遍,真还不明白说的是什么意思,于是就查看英文API,是这样说的:Flips this buffer. The limit

liuxiu699_的博客 244

【Flink】FlinkSQL如何触发执行计算

Table (通过 StatementSet.addInsert() 输出给某个 Sink)和 INSERT 语句 (通过调用 StatementSet.addInsertSql())会先被缓存到 StatementSet 中,StatementSet.execute() 方法被调用时,所有的 sink 会被优化成一张有向无环图。该方法是用来将一个表的内容插入到目标表中,一旦该方法被调用, TABLE API 程序立即被翻译。该方法是用来执行一个 SQL 语句,一旦该方法被调用, SQL 语句立即被翻译。

一杯咖啡半杯糖的博客 1007

9、 量子支持向量机:从经典到量子的跨越

本文详细介绍了量子支持向量机(QSVM)的基本原理及其在PennyLane和Qiskit框架中的实现方法。从经典SVM的基础知识出发,逐步深入到量子领域的应用,包括如何定义量子核函数、与scikit-learn集成以及在模拟器和实际量子计算机上的训练和评估过程。最后通过表格和流程图总结了不同框架下的实现要点,为未来量子机器学习的研究提供了参考。

weixin_42433737的博客 184

java.nio.Buffer flip()方法的用法详解

  今天在看《Java编程思想》的时候,碰到java.nio.Buffer flip()方法,不明白是干什么用的,于是就赶快查看中文API,API上面翻译的是:"反转此缓冲区。首先对当前位置设置限制,然后将该位置设置为零。如果已定义了标记,则丢弃该标记。";   说实话,看了几遍,真还不明白说的是什么意思,于是就查看英文API,是这样说的:Flips this buffer. The...

awp7451的博客 298

基于八叉树的k近邻搜索

在八叉树中,每个节点都表示一个正方体的体积元素(体素),并且每个节点都有八个子节点(在不为空的情况下)。搜索最近邻点:一旦确定了查询点在八叉树中的位置,就可以开始搜索最近邻点了。搜索过程通常从查询点所在的叶节点开始,并逐步扩展到相邻的叶节点和父节点,直到找到k个最近邻点为止。k近邻搜索的目标是在给定的点云数据中,找到一个查询点的k个最近邻点。定位查询点:在搜索过程中,首先需要确定查询点在八叉树中的位置。返回结果:最后,搜索算法会返回找到的k个最近邻点的索引和它们与查询点之间的距离。

twnkie的博客 674

Java NIO学习笔记二(Buffer的flip()方法详解)

flip()反转Buffer,将Buffer从读状态反转到写的状态

拿笔小星的博客 2万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Java NIO之Buffer中flip()、rewind()、clear()方法解析

1、flip() public final Buffer flip() { limit = position;//将当前的position位置赋值给limit position = 0;//将position赋值为0,即归位 mark = -1; return this; }2、rewind() public fin

Land is there, but I will build another Land 1193

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

上一篇: 分布式与集群的区别是什么?
下一篇: 深入理解ConcurrentMap.putIfAbsent(key,value) 用法
javaPie
博客等级 码龄16年 1171粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值