日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Java nio入門教程詳解(十)

 360lec 2016-09-30

2.4.4 數(shù)據(jù)元素視圖

ByteBuffer 類提供了一個不太重要的機制來以多字節(jié)數(shù)據(jù)類型的形式存取byte數(shù)據(jù)組。ByteBuffer類為每一種原始數(shù)據(jù)類型提供了存取的和轉(zhuǎn)化的方法:

  1. public abstract class ByteBuffer extends Buffer implements Comparable
  2. {
  3. public abstract char getChar();
  4. public abstract char getChar (int index);
  5. public abstract short getShort();
  6. public abstract short getShort (int index);
  7. public abstract int getInt();
  8. public abstract int getInt (int index);
  9. public abstract long getLong();
  10. public abstract long getLong (int index);
  11. public abstract float getFloat();
  12. public abstract float getFloat (int index);
  13. public abstract double getDouble();
  14. public abstract double getDouble (int index);
  15. public abstract ByteBuffer putChar (char value);
  16. public abstract ByteBuffer putChar (int index, char value);
  17. public abstract ByteBuffer putShort (short value);
  18. public abstract ByteBuffer putShort (int index, short value);
  19. public abstract ByteBuffer putInt (int value);
  20. public abstract ByteBuffer putInt (int index, int value);
  21. public abstract ByteBuffer putLong (long value);
  22. public abstract ByteBuffer putLong (int index, long value);
  23. public abstract ByteBuffer putFloat (float value);
  24. public abstract ByteBuffer putFloat (int index, float value);
  25. public abstract ByteBuffer putDouble (double value);
  26. public abstract ByteBuffer putDouble (int index, double value);
  27. }

這些函數(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圖 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)容進行分離,確保所有廣告不會影響到用戶的正常閱讀體驗。用戶僅憑個人意愿和興趣愛好點擊廣告。
我們堅信:只有給用戶帶來價值,用戶才會給我們以回報。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多