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