Java?NIO緩沖區(qū)Buffer基礎(chǔ)教程示例
概念
緩沖區(qū)(Buffer)本質(zhì)上是管理著基本元數(shù)對象的數(shù)組
Buffer家族

Buffer基本屬性
/** Invariants: mark <= position <= limit <= capacity */ //用來臨時標(biāo)記position的位置,便于還原 private int mark = -1; //即將讀取或?qū)懭氲拈_始位置 private int position = 0; //上界,緩沖區(qū)現(xiàn)有元素的數(shù)量 private int limit; //緩存區(qū)的最大容量,初始化時設(shè)定,不能改變 private int capacity;
Buffer基本API
package java.nio;
public abstract class Buffer {
//獲取緩沖區(qū)容量
public final int capacity()
//獲取當(dāng)前位置
public final int position()
//設(shè)置一個新的position
public final Buffer position(int newPosition)
//獲取上界位置
public final int limit()
//設(shè)置一個新的上界位置,但是不能小于0或超過capacity
public final Buffer limit(int newLimit)
//標(biāo)記當(dāng)前position
public final Buffer mark()
//恢復(fù)標(biāo)記的position
public final Buffer reset()
//重新設(shè)置mark=-1 position=0 limit=capacity,讀取完數(shù)據(jù)調(diào)用,數(shù)據(jù)沒有被清理,寫入的數(shù)據(jù)會覆蓋之前的數(shù)據(jù)
public final Buffer clear()
//翻轉(zhuǎn)緩沖區(qū),使寫入的數(shù)據(jù)進(jìn)入可讀狀態(tài)
public final Buffer flip()
//重置讀寫位置,將position設(shè)為0,mark設(shè)為-1丟棄
public final Buffer rewind()
//獲取當(dāng)前位置好緩沖區(qū)上界Limit還有多少元素
public final int remaining()
//判斷position是否已經(jīng)達(dá)到limit上界,用于判斷是否已經(jīng)全部讀取完畢
public final boolean hasRemaining()
//判斷當(dāng)前緩沖區(qū)是否是只讀的
public abstract boolean isReadOnly();
}填充Hello后的緩沖區(qū)
ByteBuffer buffer=ByteBuffer.allocate(10); buffer.put((byte)'H').put((byte)'e').put((byte)'l').put((byte)'l').put((byte)'o');

調(diào)用flip翻轉(zhuǎn)后的緩沖區(qū)
buffer.flip();

直接緩沖區(qū)直接緩沖區(qū)是指java虛擬機(jī)堆棧外的系統(tǒng)存儲區(qū),通常情況通道之間的緩沖區(qū)數(shù)據(jù)傳輸不能直接使用非直接緩沖區(qū),而是會創(chuàng)建臨時直接緩沖區(qū)來復(fù)制數(shù)據(jù)后傳輸,這樣導(dǎo)致性能損耗。如果是高并發(fā)情況下重復(fù)使用緩沖區(qū),使用直接緩沖區(qū)可以提高IO性能。但是創(chuàng)建直接緩沖區(qū)需要繞過JVM直接操作本地系統(tǒng),這樣的創(chuàng)建和銷毀動作需要更高的成本。
緩沖區(qū)的創(chuàng)建方式
以ByteBuffer為例
//創(chuàng)建一個直接緩沖區(qū) ByteBuffer buffer = ByteBuffer.allocateDirect(1024);
//創(chuàng)建一個間接緩沖區(qū) ByteBuffer buffer = ByteBuffer.allocate(1024);
//創(chuàng)建一個只讀的備份緩沖區(qū) byte[] bytes = "hello".getBytes(); ByteBuffer buffer = ByteBuffer.wrap(bytes);
以上就是Java NIO緩沖區(qū)Buffer基礎(chǔ)教程示例的詳細(xì)內(nèi)容,更多關(guān)于Java NIO緩沖區(qū)Buffer的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot獲取瀏覽器信息的多種實現(xiàn)方式
在Web開發(fā)中,獲取用戶瀏覽器信息是常見需求,可用于統(tǒng)計分析、個性化展示、安全防護(hù)等場景,SpringBoot提供了多種方式來獲取這些信息,下面是詳細(xì)實現(xiàn)方法,需要的朋友可以參考下2025-10-10
SpringBoot Event 事件如何實現(xiàn)異步延遲執(zhí)行
這篇文章主要介紹了Spring Boot Event 事件如何實現(xiàn)異步延遲執(zhí)行問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02
Spring Boot自定義配置屬性源(PropertySource)
這篇文章主要介紹了Spring Boot自定義配置屬性源(PropertySource),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06
淺談java實現(xiàn)redis的發(fā)布訂閱(簡單易懂)
本篇文章主要介紹了淺談java實現(xiàn) redis的發(fā)布訂閱(簡單易懂),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03

