<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      ByteBuffer中的flip()、clear()、compact()

      public static void main(String[] args) {
              try (FileChannel channel = new FileInputStream("data.txt").getChannel()){
       
                  // 定義緩沖區(qū) allocate分配大小
                  ByteBuffer buffer = ByteBuffer.allocate(10);
                  while(true) {
                      // 去讀緩沖區(qū)內(nèi)容
                      int read = channel.read(buffer);
                      if(read != -1){
                          // 切換為讀模式
                          buffer.flip();
                          while (buffer.hasRemaining()) {
                              System.out.println((char)buffer.get());
                          }
                          // 切換為寫模式
      //                    buffer.clear();
                          buffer.compact();
                      } else {
                          break;
                      }
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      View Code

      在讀取文件流時(shí),正確姿勢為:

      •     向buffer寫數(shù)據(jù),如channel.read(buffer),此時(shí)默認(rèn)為寫模式
      •     調(diào)用flip()切換為讀模式
      •     從buffer讀取數(shù)據(jù),如buffer.get()
      •     調(diào)用clear()或compact()切換為寫模式
      •     重復(fù)以上步驟


      為什么需要頻繁切換讀寫模式呢?這里簡單介紹一下flip(),clear(),compact()三者到底做了什么事。

      1、ByteBuffer的內(nèi)部結(jié)構(gòu)

      首先介紹三個(gè)屬性:

      capacity:bytebuffer容量大小
      position:位移指針位置
      limit:指針位移限制

      ByteBuffer buffer = ByteBuffer.allocate(10)分配得到的初始空間大小為:
      capacity:10字節(jié)
      position:0
      limit:為capacity的位置
      當(dāng)有數(shù)據(jù)寫入時(shí)候,每寫入一個(gè)字節(jié),position往后移動(dòng)一個(gè)字節(jié)位置,直到limit位置,該緩沖區(qū)滿。

       2、flip()方法

       如需要讀取緩沖區(qū)數(shù)據(jù),使用flip()切換為讀數(shù)據(jù)模式,此時(shí)position和limit指針位置發(fā)生變化。

        position移動(dòng)到最開始位置,limit移動(dòng)到數(shù)據(jù)長度的末尾。每讀取一個(gè)字節(jié),position向后移動(dòng)一個(gè)字節(jié)位置。直到limit位置處停止。

      3、clear()方法

      調(diào)用clear()方法,position和limit指針位置發(fā)生變化。

       clear默認(rèn)清空緩沖區(qū),回到最開始分配的樣子,即position=0,limit=capacity。

      4、compact()方法

      compact也可以切換為寫模式,不過是把未讀完成的數(shù)據(jù)向前壓縮,然后再切換。

      如果緩沖區(qū)中數(shù)據(jù)沒有讀取完,就需要立馬寫入數(shù)據(jù),所以需要對未讀取完的數(shù)據(jù)進(jìn)行壓縮,避免數(shù)據(jù)丟失。
      compact也會(huì)改變position和limit指針位置,但position != 0,而是等于上次讀取末尾的位置,limit=capacity位置。


       

       

       

      轉(zhuǎn)發(fā):https://blog.csdn.net/p793049488/article/details/122523894

      posted @ 2023-12-10 14:27  ck_2016  Views(679)  Comments(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 成人欧美一区二区三区在线观看| 色欲狠狠躁天天躁无码中文字幕| 久久综合给合久久狠狠狠| 377p日本欧洲亚洲大胆张筱雨| 国产精品久线在线观看| 无码视频一区二区三区| 国产视频深夜在线观看| 久久被窝亚洲精品爽爽爽 | 乱码中字在线观看一二区| 波多野结衣美乳人妻hd电影欧美| 人妻少妇无码精品视频区| 午夜福利国产精品视频| 蜜臀精品视频一区二区三区| 又爽又黄又无遮掩的免费视频| 亚洲色大成网站www永久男同| 亚洲欧美自偷自拍视频图片| 韩国三级网一区二区三区| 亚洲午夜亚洲精品国产成人| 蜜臀av久久国产午夜福利软件| 国产精品免费观看色悠悠| 亚洲色大成网站www永久一区 | 国产欧美日韩va另类在线播放| 池州市| 欧美性潮喷xxxxx免费视频看 | 69精品丰满人妻无码视频a片| 中文 在线 日韩 亚洲 欧美| 亚洲区综合区小说区激情区 | 亚洲天堂亚洲天堂亚洲色图| 国产亚洲精品AA片在线爽| 余干县| 成人无码区在线观看| 亚洲国产初高中生女av| 欧美在线观看www| 熟妇人妻任你躁在线视频| 亚洲午夜无码av毛片久久| 精品国产粉嫩一区二区三区| 亚洲国产精品日韩在线| 馆陶县| 精品人妻蜜臀一区二区三区| 午夜亚洲AV日韩AV无码大全| 香蕉EEWW99国产精选免费|