您好,登錄后才能下訂單哦!
這篇文章主要介紹“java.nio.Buffer源碼是什么”,在日常操作中,相信很多人在java.nio.Buffer源碼是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”java.nio.Buffer源碼是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
版本:JDK7
package java.nio;
public abstract class Buffer {
// mark <= position <= limit <= capacity private int mark = -1; // 標記,一個特定的position,通過mark()方法指定Buffer中的標記,之后可以通過reset()方法恢復到這個索引位置 private int position = 0; // 下一個要讀取或寫入的數據的索引 private int limit; // 界限,表示緩沖區中可操作數據的大小,索引等于和大于limit的數據不能進行讀寫。 private int capacity; // 緩沖區的容量,創建后不能修改。 // Used only by direct buffers // NOTE: hoisted here for speed in JNI GetDirectBufferAddress long address; // Creates a new buffer with the given mark, position, limit, and capacity, Buffer(int mark, int pos, int lim, int cap) { if (cap < 0) throw new IllegalArgumentException("Negative capacity: " + cap); this.capacity = cap; limit(lim); position(pos); if (mark >= 0) { if (mark > pos) throw new IllegalArgumentException("mark > position: (" + mark + " > " + pos + ")"); this.mark = mark; } } public final int capacity() { return capacity; } public final int position() { return position; } // 重新設置position的值 public final Buffer position(int newPosition) { if ((newPosition > limit) || (newPosition < 0)) throw new IllegalArgumentException(); position = newPosition; if (mark > position) mark = -1; return this; } public final int limit() { return limit; } // 重新設置limit的值:如果新limit小于position,則將position設為新limit public final Buffer limit(int newLimit) { if ((newLimit > capacity) || (newLimit < 0)) throw new IllegalArgumentException(); limit = newLimit; if (position > limit) position = limit; if (mark > limit) mark = -1; return this; } // 設置標記 public final Buffer mark() { mark = position; return this; } // 將position的值設置為mark public final Buffer reset() { int m = mark; if (m < 0) throw new InvalidMarkException(); position = m; return this; } // 清空緩沖區:Buffer的屬性恢復到初始化狀態。注意:此時緩沖區中的數據仍然存在。 public final Buffer clear() { position = 0; limit = capacity; mark = -1; return this; } // 將limit設為當前的position,之后將position重置為0 public final Buffer flip() { limit = position; position = 0; mark = -1; return this; } // 將position設為0,并取消設置的標記:即重新讀Buffer public final Buffer rewind() { position = 0; mark = -1; return this; } // 返回剩余的可用空間 public final int remaining() { return limit - position; } // 判斷緩沖區中是否還有元素 public final boolean hasRemaining() { return position < limit; } public abstract boolean isReadOnly(); public abstract boolean hasArray(); public abstract Object array(); public abstract int arrayOffset(); public abstract boolean isDirect(); // -- Package-private methods for bounds checking, etc. -- // ...
}
到此,關于“java.nio.Buffer源碼是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。