javaNIO中關(guān)于ByteBuffer的用法
javaNIO中ByteBuffer用法
ByteBuffer類是在javaNIO中常常使用的一個(gè)緩沖區(qū)類,使用ByteBuffer可以進(jìn)行高效的IO操作
下來(lái)我們看一下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內(nèi)部字段
position:當(dāng)前讀取的位置mark:為某一讀過(guò)的位置做標(biāo)記,便于有時(shí)候回退到該位置capacity:初始化時(shí)候的容量limit:讀寫的上限,limit <= capacity
flip()方法寫完數(shù)據(jù)需要開始讀的時(shí)候,將position復(fù)位到0,并將limit設(shè)為當(dāng)前position
public final Buffer flip() {
limit = position;
position = 0;
mark = -1;
return this;
}clear()方法是將position置為0,并不清除buffer內(nèi)容
public final Buffer clear() {
position = 0;
limit = capacity;
mark = -1;
return this;
}*mark()方法是標(biāo)記,reset()方法是回到標(biāo)記
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;
}下來(lái)看一個(gè)例子
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包,報(bào)錯(cuò)java.nio.bytebuffer.limiy(i)
問題描述
使用isoparser包,報(bào)錯(cuò)java.nio.bytebuffer.limiy(i)
IsoFile isoFile = new IsoFile("文件路徑");原因分析
我使用的是isoparser的1.9.41,某些依賴包版本太低不支持
解決方案
換成更低的版本1.9.39
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java中字符串String的+和+=及循環(huán)操作String原理詳解
Java編譯器在編譯時(shí)對(duì)String的+和+=操作會(huì)創(chuàng)建StringBuilder對(duì)象來(lái)進(jìn)行字符串的拼接,下面這篇文章主要給大家介紹了關(guān)于Java中字符串String的+和+=及循環(huán)操作String原理的相關(guān)資料,需要的朋友可以參考下2023-01-01
SpringBoot實(shí)現(xiàn)TCP連接并進(jìn)行數(shù)據(jù)互傳的方法
本文詳細(xì)介紹了微服務(wù)架構(gòu)中的翻譯組件使用場(chǎng)景,以及多種開源翻譯組件的解決方案,文中分析了國(guó)內(nèi)外多個(gè)翻譯服務(wù)如百度翻譯、谷歌翻譯等,以及如何在微服務(wù)項(xiàng)目中集成這些翻譯組件,感興趣的朋友跟隨小編一起看看吧2024-11-11
Spring Boot整合MyBatis-Plus實(shí)現(xiàn)CRUD操作的示例代碼
本文主要介紹了Spring Boot整合MyBatis-Plus實(shí)現(xiàn)CRUD操作,可以快速實(shí)現(xiàn)數(shù)據(jù)庫(kù)的增刪改查操作,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04
Java實(shí)現(xiàn)數(shù)據(jù)脫敏(Desensitization)的操作指南
數(shù)據(jù)脫敏是指通過(guò)對(duì)敏感數(shù)據(jù)進(jìn)行部分或完全隱藏處理,保護(hù)敏感信息在存儲(chǔ)和使用過(guò)程中的安全性,常見的應(yīng)用場(chǎng)景包括日志記錄、接口返回、報(bào)表展示、數(shù)據(jù)分析等,本文給大家介紹了Java實(shí)現(xiàn)數(shù)據(jù)脫敏(Desensitization)的操作指南,需要的朋友可以參考下2025-02-02
Java Web基于Session的登錄實(shí)現(xiàn)方法
這篇文章主要介紹了Java Web基于Session的登錄實(shí)現(xiàn)方法,涉及Java針對(duì)session的操作及表單提交與驗(yàn)證技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10

