javaNIO中關于ByteBuffer的用法
javaNIO中ByteBuffer用法
ByteBuffer類是在javaNIO中常常使用的一個緩沖區(qū)類,使用ByteBuffer可以進行高效的IO操作
下來我們看一下ByteBuffer類的常用方法
ByteBuffer.allocate();或者ByteBuffer.wrap();創(chuàng)建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的+和+=及循環(huán)操作String原理詳解
Java編譯器在編譯時對String的+和+=操作會創(chuàng)建StringBuilder對象來進行字符串的拼接,下面這篇文章主要給大家介紹了關于Java中字符串String的+和+=及循環(huán)操作String原理的相關資料,需要的朋友可以參考下2023-01-01Spring Boot整合MyBatis-Plus實現CRUD操作的示例代碼
本文主要介紹了Spring Boot整合MyBatis-Plus實現CRUD操作,可以快速實現數據庫的增刪改查操作,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧2025-04-04Java實現數據脫敏(Desensitization)的操作指南
數據脫敏是指通過對敏感數據進行部分或完全隱藏處理,保護敏感信息在存儲和使用過程中的安全性,常見的應用場景包括日志記錄、接口返回、報表展示、數據分析等,本文給大家介紹了Java實現數據脫敏(Desensitization)的操作指南,需要的朋友可以參考下2025-02-02