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

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

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

概念

緩沖區(qū)(Buffer)本質上是管理著基本元數(shù)對象的數(shù)組

Buffer家族

Buffer基本屬性

/** Invariants: mark <= position <= limit <= capacity */

//用來臨時標記position的位置,便于還原
private int mark = -1;
//即將讀取或寫入的開始位置
private int position = 0;
//上界,緩沖區(qū)現(xiàn)有元素的數(shù)量
private int limit;
//緩存區(qū)的最大容量,初始化時設定,不能改變
private int capacity;

Buffer基本API

package java.nio;
public abstract class Buffer {
    //獲取緩沖區(qū)容量
    public final int capacity()
    //獲取當前位置
    public final int position()
    //設置一個新的position
    public final Buffer position(int newPosition)
    //獲取上界位置
    public final int limit()
    //設置一個新的上界位置,但是不能小于0或超過capacity
    public final Buffer limit(int newLimit)
    //標記當前position
    public final Buffer mark()
    //恢復標記的position
    public final Buffer reset()
    //重新設置mark=-1 position=0 limit=capacity,讀取完數(shù)據(jù)調用,數(shù)據(jù)沒有被清理,寫入的數(shù)據(jù)會覆蓋之前的數(shù)據(jù)
    public final Buffer clear()
    //翻轉緩沖區(qū),使寫入的數(shù)據(jù)進入可讀狀態(tài)
    public final Buffer flip()
    //重置讀寫位置,將position設為0,mark設為-1丟棄
    public final Buffer rewind()
    //獲取當前位置好緩沖區(qū)上界Limit還有多少元素
    public final int remaining()
    //判斷position是否已經(jīng)達到limit上界,用于判斷是否已經(jīng)全部讀取完畢
    public final boolean hasRemaining()
    //判斷當前緩沖區(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');

調用flip翻轉后的緩沖區(qū)

buffer.flip();

直接緩沖區(qū)直接緩沖區(qū)是指java虛擬機堆棧外的系統(tǒng)存儲區(qū),通常情況通道之間的緩沖區(qū)數(shù)據(jù)傳輸不能直接使用非直接緩沖區(qū),而是會創(chuàng)建臨時直接緩沖區(qū)來復制數(shù)據(jù)后傳輸,這樣導致性能損耗。如果是高并發(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基礎教程示例的詳細內容,更多關于Java NIO緩沖區(qū)Buffer的資料請關注腳本之家其它相關文章!

相關文章

最新評論