乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Java nio入門教程詳解(九)

       360lec 2016-09-30

      2.4.3 視圖緩沖區(qū)

      就像我們已經(jīng)討論的那樣,I/O 基本上可以歸結(jié)成組字節(jié)數(shù)據(jù)的四處傳遞。在進行大數(shù)據(jù)量的 I/O 操作時,很又可能您會使用各種ByteBuffer類去讀取文件內(nèi)容,接收來自網(wǎng)絡連接的數(shù)據(jù),等等。一旦數(shù)據(jù)到達了您的 ByteBuffer,您就需要查看它以決定怎么做或者在將它發(fā)送出去之前對它進行一些操作。ByteBuffer類提供了豐富的 API 來創(chuàng)建視圖緩沖區(qū)。

      視圖緩沖區(qū)通過已存在的緩沖區(qū)對象實例的工廠方法來創(chuàng)建。這種視圖對象維護它自己的屬性,容量,位置,上界和標記,但是和原來的緩沖區(qū)共享數(shù)據(jù)元素。我們已經(jīng)在 2.3 節(jié)見過了這樣的簡單例子,在例子中一個緩沖區(qū)被復制和切分。但是ByteBuffer類允許創(chuàng)建視圖來將byte型緩沖區(qū)字節(jié)數(shù)據(jù)映射為其它的原始數(shù)據(jù)類型。例如,asLongBuffer()函數(shù)創(chuàng)建一個將八個字節(jié)型數(shù)據(jù)當成一個 long 型數(shù)據(jù)來存取的視圖緩沖區(qū)。

      下面列出的每一個工廠方法都在原有的ByteBuffer對象上創(chuàng)建一個視圖緩沖區(qū)。調(diào)用其中的任何一個方法都會創(chuàng)建對應的緩沖區(qū)類型,這個緩沖區(qū)是基礎(chǔ)緩沖區(qū)的一個切分,由基礎(chǔ)緩沖區(qū)的位置和上界決定。新的緩沖區(qū)的容量是字節(jié)緩沖區(qū)中存在的元素數(shù)量除以視圖類型中組成一個數(shù)據(jù)類型的字節(jié)數(shù)(參見表 2-1)。在切分中任一個超過上界的元素對于這個視圖緩沖區(qū)都是不可見的。視圖緩沖區(qū)的第一個元素從創(chuàng)建它的ByteBuffer對象的位置開始(positon()函數(shù)的返回值)。具有能被自然數(shù)整除的數(shù)據(jù)元素個數(shù)的視圖緩沖區(qū)是一種較好的實現(xiàn)。

      1. public abstract class ByteBuffer extends Buffer implements Comparable
      2. {
      3. // 這里僅列出部分API
      4. public abstract CharBuffer asCharBuffer();
      5. public abstract ShortBuffer asShortBuffer();
      6. public abstract IntBuffer asIntBuffer();
      7. public abstract LongBuffer asLongBuffer();
      8. public abstract FloatBuffer asFloatBuffer();
      9. public abstract DoubleBuffer asDoubleBuffer();
      10. }

      下面的代碼創(chuàng)建了一個ByteBuffer緩沖區(qū)的CharBuffer視圖,如圖 Figure 2-16所示(Example 2-2 將這個框架用到了更大的范圍)

      1. ByteBuffer byteBuffer = ByteBuffer.allocate (7).order(ByteOrder.BIG_ENDIAN);
      2. CharBuffer charBuffer = byteBuffer.asCharBuffer();

      圖 2-16. 一個 ByteBuffer 的 CharBuffer 視圖圖 2-16. 一個 ByteBuffer 的 CharBuffer 視圖

      例 2-2. 創(chuàng)建一個 ByteBuffer 的字符視圖

      1. package com.ronsoft.books.nio.buffers;
      2. import java.nio.Buffer;
      3. import java.nio.ByteBuffer;
      4. import java.nio.CharBuffer;
      5. import java.nio.ByteOrder;
      6. /**
      7. * Test asCharBuffer view.
      8. *
      9. * Created May 2002
      10. * @author Ron Hitchens (ron@ronsoft.com)
      11. */
      12. public class BufferCharView
      13. {
      14.     public static void main (String [] argv) throws Exception
      15.     {
      16.         ByteBuffer byteBuffer = ByteBuffer.allocate(7).order (ByteOrder.BIG_ENDIAN);
      17.         CharBuffer charBuffer = byteBuffer.asCharBuffer( );
      18.         // Load the ByteBuffer with some bytes
      19.         byteBuffer.put (0, (byte)0);
      20.         byteBuffer.put (1, (byte)'H');
      21.         byteBuffer.put (2, (byte)0);
      22.         byteBuffer.put (3, (byte)'i');
      23.         byteBuffer.put (4, (byte)0);
      24.         byteBuffer.put (5, (byte)'!');
      25.         byteBuffer.put (6, (byte)0);
      26.         println (byteBuffer);
      27.         println (charBuffer);
      28.     }
      29.     // Print info about a buffer
      30.     private static void println (Buffer buffer)
      31.     {
      32.         System.out.println ("pos=" + buffer.position() + ", limit=" + buffer.limit() + ", capacity=" + buffer.capacity() + ": '" + buffer.toString() + "'");
      33.     }
      34. }

      運行BufferCharView程序的輸出是:

      pos=0, limit=7, capacity=7: 'java.nio.HeapByteBuffer[pos=0 lim=7 cap=7]'
      pos=0, limit=3, capacity=3: 'Hi!

      一旦您得到了視圖緩沖區(qū),您可以用duplicate(), slice()asReadOnlyBuffer()函數(shù)創(chuàng)建進一步的子視圖,就像 2.3 節(jié)所討論的那樣。

      無論何時一個視圖緩沖區(qū)存取一個ByteBuffer的基礎(chǔ)字節(jié),這些字節(jié)都會根據(jù)這個視圖緩沖區(qū)的字節(jié)順序設(shè)定被包裝成一個數(shù)據(jù)元素。當一個視圖緩沖區(qū)被創(chuàng)建時,視圖創(chuàng)建的同時它也繼承了基礎(chǔ)ByteBuffer對象的字節(jié)順序設(shè)定。這個視圖的字節(jié)排序不能再被修改。在圖 2-16 中,您可以看到基礎(chǔ)ByteBuffer對象中的兩個字節(jié)映射成CharBuffer對象中的一個字符。字節(jié)順序設(shè)定決定了這些字節(jié)對是怎么樣被組合成字符型變量的。請參考2.4.1 節(jié)獲取更多詳細的解釋。

      當直接從byte型緩沖區(qū)中采集數(shù)據(jù)時,視圖換沖突擁有提高效率的潛能。如果這個視圖的字節(jié)順序和本地機器硬件的字節(jié)順序一致,低等級的(相對于高級語言而言)語言的代碼可以直接存取緩沖區(qū)中的數(shù)據(jù)值,而不是通過比特數(shù)據(jù)的包裝和解包裝過程來完成。

      Java nio入門教程詳解(十)

      0 0
      我們認為:用戶的主要目的,是為了獲取有用的信息,而不是來點擊廣告的。因此本站將竭力做好內(nèi)容,并將廣告和內(nèi)容進行分離,確保所有廣告不會影響到用戶的正常閱讀體驗。用戶僅憑個人意愿和興趣愛好點擊廣告。
      我們堅信:只有給用戶帶來價值,用戶才會給我們以回報。

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多