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多线程实现之同步方法详解

    Java多线程实现之同步方法详解

    当多个线程同时访问共享资源时,可能会导致数据不一致等线程安全问题,Java提供了synchronized关键字来实现线程同步,确保同一时刻只有一个线程可以访问共享资源,下面就来介绍一下如何使用,感兴趣的可以了解一下
    2025-12-12
  • Java工厂模式之简单工厂,工厂方法,抽象工厂模式详解

    Java工厂模式之简单工厂,工厂方法,抽象工厂模式详解

    这篇文章主要为大家详细介绍了Java工厂模式之简单工厂、工厂方法、抽象工厂模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • Java面试题冲刺第七天--Spring框架1

    Java面试题冲刺第七天--Spring框架1

    这篇文章主要为大家分享了最有价值的三道Spring框架面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • java通过ip获取客户端Mac地址的小例子

    java通过ip获取客户端Mac地址的小例子

    java通过ip获取客户端Mac地址的小例子,需要的朋友可以参考一下
    2013-03-03
  • Spring解决循环依赖问题的三种方法小结

    Spring解决循环依赖问题的三种方法小结

    在 Spring 中,循环依赖问题指的是两个或多个 bean 之间相互依赖形成的闭环,具体而言,当 bean A 依赖于 bean B,同时 bean B 也依赖于 bean A,就形成了循环依赖,本文就给大家介绍了Spring解决循环依赖问题的三种方法,需要的朋友可以参考下
    2023-09-09
  • Spring中Bean扫描原理详情

    Spring中Bean扫描原理详情

    这篇文章主要介绍了Spring中Bean扫描原理详情,文章为荣啊主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • spring cloud 配置阿里数据库连接池 druid的示例代码

    spring cloud 配置阿里数据库连接池 druid的示例代码

    这篇文章主要介绍了spring cloud 配置阿里数据库连接池 druid,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • Java定时调用.ktr文件的示例代码(解决方案)

    Java定时调用.ktr文件的示例代码(解决方案)

    这篇文章主要介绍了Java定时调用.ktr文件的示例代码,本文给大家分享遇到问题及解决方法,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Java日常练习题,每天进步一点点(44)

    Java日常练习题,每天进步一点点(44)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • Java文件操作实例详解

    Java文件操作实例详解

    这篇文章主要为大家详细介绍了Java文件操作实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04

最新评论