javaNIO中关于ByteBuffer的用法

 更新时间:2023年08月21日 10:09:37   作者:15191806282  
这篇文章主要介绍了javaNIO中关于ByteBuffer的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

javaNIO中ByteBuffer用法

ByteBuffer类是在javaNIO中常常使用的一个缓冲区类,使用ByteBuffer可以进行高效的IO操作

下来我们看一下ByteBuffer类的常用方法

ByteBuffer.allocate();或者ByteBuffer.wrap();创建ByteBuffer

 public static ByteBuffer allocate(int capacity) {
        if (capacity < 0)
            throw new IllegalArgumentException();
        return new HeapByteBuffer(capacity, capacity);
    }
 public static ByteBuffer wrap(byte[] array,
                                    int offset, int length)
 {
    try {
         return new HeapByteBuffer(array, offset, length);
    } catch (IllegalArgumentException x) {
            throw new IndexOutOfBoundsException();
     }
  }

读写的方法就read()、write(),在这之中我们看一下ByteBuffer内部字段

  • position:当前读取的位置
  • mark:为某一读过的位置做标记,便于有时候回退到该位置
  • capacity:初始化时候的容量
  • limit:读写的上限,limit <= capacity

flip()方法写完数据需要开始读的时候,将position复位到0,并将limit设为当前position

 public final Buffer flip() {
        limit = position;
        position = 0;
        mark = -1;
        return this;
    }

clear()方法是将position置为0,并不清除buffer内容

 public final Buffer clear() {
        position = 0;
        limit = capacity;
        mark = -1;
        return this;
    }

*mark()方法是标记,reset()方法是回到标记

 public final Buffer mark() {
        mark = position;
        return this;
    }
 public final Buffer reset() {
        int m = mark;
        if (m < 0)
            throw new InvalidMarkException();
        position = m;
        return this;
    }

下来看一个例子

public void test() throws IOException
    {
        ByteBuffer buff = ByteBuffer.allocate(256);
        FileChannel in = null;
        FileChannel out = null;
        try
        {
            in = new FileInputStream("filein").getChannel();
            out = new FileOutputStream("fileout").getChannel();
            while(fin.read(buff) != -1) {
                buff.flip();
                fout.write(buff);
                buff.clear();
            }
        }
        catch (FileNotFoundException e)
        {
            throw e;
        } finally {
            try {
                if(in != null) {
                    in.close();
                }
                if(fout != null) {
                    out.close();
                }
            } catch(IOException e) {
                throw e;
            }
        }
    }

使用isoparser包,报错java.nio.bytebuffer.limiy(i)

问题描述

使用isoparser包,报错java.nio.bytebuffer.limiy(i)

IsoFile isoFile = new IsoFile("文件路径");

原因分析

我使用的是isoparser的1.9.41,某些依赖包版本太低不支持

解决方案

换成更低的版本1.9.39

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java中字符串String的+和+=及循环操作String原理详解

    Java中字符串String的+和+=及循环操作String原理详解

    Java编译器在编译时对String的+和+=操作会创建StringBuilder对象来进行字符串的拼接,下面这篇文章主要给大家介绍了关于Java中字符串String的+和+=及循环操作String原理的相关资料,需要的朋友可以参考下
    2023-01-01
  • Java并发编程之原子性-Atomic的使用

    Java并发编程之原子性-Atomic的使用

    这篇文章主要介绍了Java并发编程之原子性-Atomic的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • SpringBoot实现TCP连接并进行数据互传的方法

    SpringBoot实现TCP连接并进行数据互传的方法

    本文详细介绍了微服务架构中的翻译组件使用场景,以及多种开源翻译组件的解决方案,文中分析了国内外多个翻译服务如百度翻译、谷歌翻译等,以及如何在微服务项目中集成这些翻译组件,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • 如何使用新方式编写Spring MVC接口

    如何使用新方式编写Spring MVC接口

    这篇文章主要介绍了如何使用新方式编写Spring MVC接口,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Spring Boot整合MyBatis-Plus实现CRUD操作的示例代码

    Spring Boot整合MyBatis-Plus实现CRUD操作的示例代码

    本文主要介绍了Spring Boot整合MyBatis-Plus实现CRUD操作,可以快速实现数据库的增删改查操作,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • Java实现数据脱敏(Desensitization)的操作指南

    Java实现数据脱敏(Desensitization)的操作指南

    数据脱敏是指通过对敏感数据进行部分或完全隐藏处理,保护敏感信息在存储和使用过程中的安全性,常见的应用场景包括日志记录、接口返回、报表展示、数据分析等,本文给大家介绍了Java实现数据脱敏(Desensitization)的操作指南,需要的朋友可以参考下
    2025-02-02
  • Spring中Eureka的服务下线详解

    Spring中Eureka的服务下线详解

    这篇文章主要介绍了Spring中Eureka的服务下线详解,根据默认的策略,如果在一定的时间内,客户端没有向注册中心发送续约请求,那么注册中心就会将该实例从注册中心移除,需要的朋友可以参考下
    2023-11-11
  • Java如何将时间戳格式化为日期字符串

    Java如何将时间戳格式化为日期字符串

    这篇文章主要介绍了Java如何将时间戳格式化为日期字符串问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • Java Stream reduce()使用指南

    Java Stream reduce()使用指南

    reduce()是Java Stream API中的一个重要终端操作,用于将流中的元素通过二元运算符结合起来,生成单一结果,它主要用于计算总和、乘积、最大值、最小值和字符串连接等,本文给大家介绍Java Stream reduce(),感兴趣的朋友一起看看吧
    2024-10-10
  • Java Web基于Session的登录实现方法

    Java Web基于Session的登录实现方法

    这篇文章主要介绍了Java Web基于Session的登录实现方法,涉及Java针对session的操作及表单提交与验证技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10

最新评论