NIO之緩沖區【復制緩沖區

      網友投稿 833 2025-04-01

      復制緩沖區


      復制一個緩沖區會創建一個新的 Buffer 對象,但并不復制數據。原始緩沖區和副本都會操作同樣的數據元素。我們將以 CharBuffer 為例來演示,但同樣的操作可被用于任何基本的緩沖區類型

      public abstract class CharBuffer extends Buffer implements CharSequence, Comparable { // This is a partial API listing public abstract CharBuffer duplicate( ); public abstract CharBuffer asReadOnlyBuffer( ); public abstract CharBuffer slice( ); }

      1

      2

      3

      4

      5

      6

      7

      duplicate

      函數創建了一個與原始緩沖區相似的新緩沖區。兩個緩沖區共享數據元素,擁有同樣的容量,但每個緩沖區擁有各自的位置,上界和標記屬性。對一個緩沖區內的數據元素所做的改變會反映在另外一個緩沖區上。這一副本緩沖區具有與原始緩沖區同樣的數據視圖。如果原始的緩沖區為只讀,或者為直接緩沖區,新的緩沖區將繼承這些屬性。

      public static void main(String[] args) { CharBuffer charbuffer1 = CharBuffer.allocate(10); CharBuffer charbuffer2 = charbuffer1.duplicate(); charbuffer1.put('a').put('b').put('c'); charbuffer1.flip(); System.out.println(charbuffer1+"--"+charbuffer1.capacity()+" "+charbuffer1.limit()+" "+charbuffer1.position()); System.out.println(charbuffer2+"--"+charbuffer2.capacity()+" "+charbuffer2.limit()+" "+charbuffer2.position()); }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      輸出結果

      abc--10 3 0 abc --10 10 0

      1

      2

      asReadOnlyBuffer

      asReadOnlyBuffer()函數來生成一個

      只讀

      的緩沖區視圖,這與duplicate()相同,除了這個新的緩沖區不允許使用put(),并且其isReadOnly()函數將會返回true。對這一只讀緩沖區的put()函數的調用嘗試會導致拋出ReadOnlyBufferException異常。

      public static void main(String[] args) { CharBuffer charbuffer1 = CharBuffer.allocate(10); CharBuffer charbuffer2 = charbuffer1.asReadOnlyBuffer(); charbuffer1.put('a').put('b').put('c'); charbuffer1.flip(); System.out.println(charbuffer1); System.out.println(charbuffer2); charbuffer2.put("d"); }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      輸出:

      abc abc Exception in thread "main" java.nio.ReadOnlyBufferException at java.nio.CharBuffer.put(Unknown Source) at java.nio.CharBuffer.put(Unknown Source) at com.sxt.nio.Demo02.main(Demo02.java:14)

      1

      2

      3

      4

      5

      6

      slice

      分割緩沖區與復制相似,但slice()創建一個從原始緩沖區的當前位置開始的新緩沖區,并且其容量是原始緩沖區的剩余元素數量(limit-position)。這個新緩沖區與原始緩沖區共享一段數據元素子序列。分割出來的緩沖區也會繼承只讀和直接屬性。

      public static void main(String[] args) { CharBuffer charbuffer1 = CharBuffer.allocate(10); charbuffer1.put('a').put('b').put('c'); charbuffer1.flip(); System.out.println(charbuffer1); System.out.println(charbuffer1.position()+" "+charbuffer1.limit()+" "+charbuffer1.capacity()); charbuffer1.position(1); CharBuffer cb = charbuffer1.slice(); System.out.println(cb); System.out.println(cb.position()+" "+cb.limit()+" "+cb.capacity()); }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      輸出

      abc 0 3 10 bc 0 2 2

      1

      NIO之緩沖區【復制緩沖區】

      2

      3

      4

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:智能家居全鋁定制- 實現您的夢想家居
      下一篇:excel統計非空單元格的函數
      相關文章
      亚洲VA中文字幕无码一二三区 | 在线观看午夜亚洲一区| 亚洲精品理论电影在线观看 | 亚洲男人天堂2020| 日本亚洲高清乱码中文在线观看| 亚洲一区二区三区乱码在线欧洲| 亚洲国产精品yw在线观看| 亚洲成aⅴ人在线观看| 亚洲一级毛片免费观看| 亚洲入口无毒网址你懂的| 亚洲中文字幕日本无线码| 国产精品高清视亚洲一区二区| 亚洲看片无码在线视频| 亚洲中文无码永久免| 亚洲成AV人影片在线观看| 亚洲va中文字幕| 看亚洲a级一级毛片| 亚洲AV无码成H人在线观看| www.亚洲色图| 中文字幕亚洲一区二区va在线| 亚洲中文字幕不卡无码| 亚洲爆乳无码专区| 97亚洲熟妇自偷自拍另类图片| 亚洲综合久久成人69| 亚洲中文字幕在线无码一区二区| 亚洲人成网国产最新在线| 亚洲综合色婷婷在线观看| 亚洲av永久无码精品秋霞电影秋 | 亚洲av中文无码字幕色不卡| 激情婷婷成人亚洲综合| 亚洲午夜成人精品电影在线观看| 国产AV无码专区亚洲AWWW| 亚洲春色在线视频| 亚洲精品福利网站| 亚洲日韩国产精品乱-久| 国产精品亚洲AV三区| 不卡一卡二卡三亚洲| 午夜亚洲国产理论秋霞| 亚洲天堂福利视频| 亚洲美国产亚洲AV| 亚洲一级特黄大片在线观看|