java nio :ByteBuffer

java nio :ByteBuffer,第1张

java nio :ByteBuffer java nio :ByteBuffer
  1. bytebuffer基本函数
    1. // 分配了一个能存储8字节的ByteBuffer,并且只能写入
      ByteBuffer buffer = ByteBuffer.allocate(8);
      
    2. // 由写切换成读
      buffer.flip();
      
    3. // 读转写
      buffer.clear();
      
  2. 基本使用流程
    1. 向buffer写入数据,比如调用channel.read(buffer)
    2. 调用flip()切换成读模式
    3. 向buffer读取数据,比如调用buffer.get()
    4. 调用clear() # 从头开始写或compact() #上次未读完的位置开始写 切换成写模式
    5. 重复以上步骤
  3. 内部结构
    1. 基本属性:
      1. capcity:容量
      2. position:读和写的起始指针
      3. limit:读写位置限制
        1. limit-position表示可读/写的容量
  4. bytebuffer方法
    1. rewind():
      // 将position设为0,表示会从0开始读
      
    2. put() # 读数据,position会移动
      put(int index) # position不会移动
      
    3. mark() # 记录position位置
      reset() #将position重置到mark()那里
      
  5. 集中读
    1. FileChannel channel = new FileInputStream("data.txt").getChannel();
      ByteBuffer buffer1 = ByteBuffer.allocate(4);
      ByteBuffer buffer2 = ByteBuffer.allocate(5);
      ByteBuffer buffer3 = ByteBuffer.allocate(6);
      channel.read(new ByteBuffer[]{buffer1, buffer2, buffer3});
      buffer1.flip();
      buffer2.flip();
      buffer3.flip();
      
  6. 集中写
    1. ByteBuffer a = StandardCharsets.UTF_8.encode("hello");
      ByteBuffer b = StandardCharsets.UTF_8.encode("world");
      ByteBuffer c = StandardCharsets.UTF_8.encode("你好");
      try {
          FileChannel channel = new RandomAccessFile("data2.txt", "rw").getChannel();
          channel.write(new ByteBuffer[]{a, b, c});
      } catch (FileNotFoundException e) {
          e.printStackTrace();
      } catch (IOException e) {
          e.printStackTrace();
      }
      

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5138575.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存