2.4.4 數(shù)據(jù)元素視圖 ByteBuffer 類提供了一個不太重要的機制來以多字節(jié)數(shù)據(jù)類型的形式存取byte 數(shù)據(jù)組。ByteBuffer 類為每一種原始數(shù)據(jù)類型提供了存取的和轉(zhuǎn)化的方法: - public abstract class ByteBuffer extends Buffer implements Comparable
- {
- public abstract char getChar();
- public abstract char getChar (int index);
- public abstract short getShort();
- public abstract short getShort (int index);
- public abstract int getInt();
- public abstract int getInt (int index);
- public abstract long getLong();
- public abstract long getLong (int index);
- public abstract float getFloat();
- public abstract float getFloat (int index);
- public abstract double getDouble();
- public abstract double getDouble (int index);
- public abstract ByteBuffer putChar (char value);
- public abstract ByteBuffer putChar (int index, char value);
- public abstract ByteBuffer putShort (short value);
- public abstract ByteBuffer putShort (int index, short value);
- public abstract ByteBuffer putInt (int value);
- public abstract ByteBuffer putInt (int index, int value);
- public abstract ByteBuffer putLong (long value);
- public abstract ByteBuffer putLong (int index, long value);
- public abstract ByteBuffer putFloat (float value);
- public abstract ByteBuffer putFloat (int index, float value);
- public abstract ByteBuffer putDouble (double value);
- public abstract ByteBuffer putDouble (int index, double value);
- }
這些函數(shù)從當(dāng)前位置開始存取ByteBuffer 的字節(jié)數(shù)據(jù),就好像一個數(shù)據(jù)元素被存儲在那里一樣。根據(jù)這個緩沖區(qū)的當(dāng)前的有效的字節(jié)順序,這些字節(jié)數(shù)據(jù)會被排列或打亂成需要的原始數(shù)據(jù)類型。比如說,如果getInt() 函數(shù)被調(diào)用,從當(dāng)前的位置開始的四個字節(jié)會被包裝成一個int 類型的變量然后作為函數(shù)的返回值返回。參見 2.4.1 節(jié)。 假設(shè)一個叫buffer的ByteBuffer 對象處于圖 Figure 2-17 的狀態(tài)。 圖 2-17. 包含一些數(shù)據(jù)的 ByteBuffer
這段代碼: int value = buffer.getInt(); 會返回一個由緩沖區(qū)中位置1-4的byte 數(shù)據(jù)值組成的int 型變量的值。實際的返回值取決于緩沖區(qū)的當(dāng)前的比特排序(byte-order)設(shè)置。更具體的寫法是: int value = buffer.order (ByteOrder.BIG_ENDIAN).getInt(); 這將會返回值 0x3BC5315E,同時: int value = buffer.order (ByteOrder.LITTLE_ENDIAN).getInt(); 返回值 0x5E31C53B。
如果您試圖獲取的原始類型需要比緩沖區(qū)中存在的字節(jié)數(shù)更多的字節(jié),會拋出BufferUnderflowException 。對于圖 Figure2-17 中的緩沖區(qū),這段代碼會拋出異常,因為一個long 型變量是8個字節(jié)的,但是緩沖區(qū)中只有5個字節(jié): long value = buffer.getLong(); 這些函數(shù)返回的元素不需要被任何特定模塊界限所限制。數(shù)值將會從以緩沖區(qū)的當(dāng)前位置開始的字節(jié)緩沖區(qū)中取出并組合,無論字組是否對齊。這樣的做法是低效的,但是它允許對一個字節(jié)流中的數(shù)據(jù)進行隨機的放置。對于從二進制文件數(shù)據(jù)或者包裝數(shù)據(jù)成特定平臺的格式或者導(dǎo)出到外部的系統(tǒng),這將是非常有用的。 put 函數(shù)提供與 get 相反的操作。原始數(shù)據(jù)的值會根據(jù)字節(jié)順序被分拆成一個個byte 數(shù)據(jù)。如果存儲這些字節(jié)數(shù)據(jù)的空間不夠,會拋出BufferOverflowException 。 每一個函數(shù)都有重載的和無參數(shù)的形式。重載的函數(shù)對位置屬性加上特定的字節(jié)數(shù)。然后無參數(shù)的形式則不改變位置屬性。 Java nio入門教程詳解(十一)
0
0
我們認(rèn)為:用戶的主要目的,是為了獲取有用的信息,而不是來點擊廣告的。因此本站將竭力做好內(nèi)容,并將廣告和內(nèi)容進行分離,確保所有廣告不會影響到用戶的正常閱讀體驗。用戶僅憑個人意愿和興趣愛好點擊廣告。
我們堅信:只有給用戶帶來價值,用戶才會給我們以回報。
|