<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### 緩沖區細節 緩沖區由數據和四個索引組成,以有效地訪問和操作該數據:mark、position、limit 和 capacity(標記、位置、限制和容量)。伴隨著的還有一組方法可以設置和重置這些索引,并可查詢它們的值。 | | | | :----- | :----- | | **capacity()** | 返回緩沖區的 capacity | |**clear()** |清除緩沖區,將 position 設置為零并 設 limit 為 capacity;可調用此方法來覆蓋現有緩沖區| |**flip()** | 將 limit 設置為 position,并將 position 設置為 0;此方法用于準備緩沖區,以便在數據寫入緩沖區后進行讀取| |**limit()** |返回 limit 的值| |**limit(int limit)**| 重設 limit| |**mark()** |設置 mark 為當前的 position | |**position()** |返回 position | |**position(int pos)**| 設置 position| |**remaining()** |返回 limit 到 position | |**hasRemaining()**| 如果在 position 與 limit 中間有元素,返回 `true`| 從緩沖區插入和提取數據的方法通過更新索引來反映所做的更改。下例使用一種非常簡單的算法(交換相鄰字符)來對 **CharBuffer** 中的字符進行加擾和解擾。代碼示例: ```java // newio/UsingBuffers.java // (c)2017 MindView LLC: see Copyright.txt // 我們無法保證該代碼是否適用于其他用途。 // 訪問 http://OnJava8.com 了解更多本書信息。 import java.nio.*; public class UsingBuffers { private static void symmetricScramble(CharBuffer buffer) { while(buffer.hasRemaining()) { buffer.mark(); char c1 = buffer.get(); char c2 = buffer.get(); buffer.reset(); buffer.put(c2).put(c1); } } public static void main(String[] args) { char[] data = "UsingBuffers".toCharArray(); ByteBuffer bb = ByteBuffer.allocate(data.length * 2); CharBuffer cb = bb.asCharBuffer(); cb.put(data); System.out.println(cb.rewind()); symmetricScramble(cb); System.out.println(cb.rewind()); symmetricScramble(cb); System.out.println(cb.rewind()); } } ``` 輸出結果: ``` UsingBuffers sUniBgfuefsr UsingBuffers ``` 雖然可以通過使用 **char** 數組調用 `wrap()` 直接生成 **CharBuffer**,但是底層的 **ByteBuffer** 將被分配,而 **CharBuffer** 將作為 **ByteBuffer** 上的視圖生成。這強調了目標始終是操作 **ByteBuffer**,因為它與通道交互。 下面是程序在 `symmetricgrab()` 方法入口時緩沖區的樣子: ![1554546627710](../images/1554546627710.png) position 指向緩沖區中的第一個元素,capacity 和 limit 緊接在最后一個元素之后。在`symmetricgrab()` 中,**while** 循環迭代到 position 等于 limit。當在緩沖區上調用相對位置的 `get()` 或 `put()` 函數時,緩沖區的位置會發生變化。你可以調用絕對位置的 `get()` 和 `put()` 方法,它們包含索引參數:`get()` 或 `put()` 發生的位置。這些方法不修改緩沖區 position 的值。 當控件進入 **while** 循環時,使用 `mark()` 設置 mark 的值。緩沖區的狀態為: ![1554546666685](../images/1554546666685.png) 兩個相對 `get()` 調用將前兩個字符的值保存在變量 `c1` 和 `c2` 中。在這兩個調用之后,緩沖區看起來是這樣的: ![1554546693664](../images/1554546693664.png) 為了執行交換,我們在位置 0 處編寫 `c2`,在位置 1 處編寫 `c1`。我們可以使用絕對 `put()` 方法來實現這一點,或者用 `reset()` 方法,將 position 的值設置為 mark: ![1554546847181](../images/1554546847181.png) 兩個 `put()` 方法分別編寫 `c2` 和 `c1` : ![1554546861836](../images/1554546861836.png) 在下一次循環中,將 mark 設置為 position 的當前值: ![1554546881189](../images/1554546881189.png) 該過程將繼續,直到遍歷整個緩沖區為止。在 **while** 循環的末尾,position 位于緩沖區的末尾。如果顯示緩沖區,則只顯示位置和限制之間的字符。因此,要顯示緩沖區的全部內容,必須使用 `rewind()` 將 position 設置為緩沖區的開始位置。這是 `rewind()` 調用后緩沖區的狀態(mark 的值變成未定義): ![1554546890132](../images/1554546890132.png) 再次調用 `symmetricgrab()` 方法時,**CharBuffer** 將經歷相同的過程并恢復到原始狀態。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看