欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java?NIO緩沖區(qū)Buffer基礎(chǔ)教程示例

 更新時間:2023年10月27日 10:36:18   作者:lane  
這篇文章主要介紹了Java?NIO緩沖區(qū)Buffer基礎(chǔ)教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

概念

緩沖區(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)文章

最新評論