Java NiO 缓冲区学习笔记

本文介绍了Java NIO中的缓冲区概念及其使用方法,包括各种类型缓冲区的创建与管理,核心属性如capacity、limit和position的作用,以及如何通过put()和get()方法进行数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  一、缓冲区(Buffer):在 Java NIO 中负责数据的存取。缓冲区就是数组。用于存储不同数据类型的数据

        根据数据类型不同(boolean 除外),提供了相应类型的缓冲区:  ByteBuffer、 CharBuffer、ShortBuffer、 IntBuffer、 LongBuffer、FloatBuffer、 DoubleBuffer

        上述缓冲区的管理方式几乎一致,通过 allocate() 获取缓冲区,如 ByteBuffer.allocate(1024);

二、    缓冲区存取数据 核心方法 put() 存入数据到缓冲区中  ;get() 获取缓冲区中的数据


三、缓冲区的核心属性:

       capatity 容量 缓冲区最大存储数据容量,一旦声明不能改变 ;
        limit:界限,表示缓冲区可以操作数据的大小(limit后数据不能进行读写)
        position 位置,表示缓冲区正在操作数据的位置
        mark :标记 表示记录当前 position 的位置。可以通过 reset() 恢复到 mark 的位置      

  四、直接缓冲区与非直接缓冲区:
  非直接缓冲区:通过 allocate() 方法分配缓冲区,将缓冲区建立在 JVM 的内存中
  直接缓冲区:通过 allocateDirect() 方法分配直接缓冲区,将缓冲区建立在物理内存中。可以提高效率

代码实例

    public void test1(){
   String str="abcde";
   //分配指定大小的缓冲区
ByteBuffer buf=ByteBuffer.allocate(1024);
        System.out.println("");
       //存数据
        buf.put(str.getBytes());
        System.out.println("put");
      System.out.println(buf.position());
      System.out.println(buf.limit());
      System.out.println(buf.capacity());
      
      //切换读数据模式
      buf.flip();
      //利用get读取缓冲区数据
      byte[] dst=new byte[buf.limit()];
      buf.get(dst);
      System.out.println(new String(dst,0,dst.length)); 
      System.out.println("get");
      System.out.println(buf.position());
      System.out.println(buf.limit());
      System.out.println(buf.capacity());
      
      //rewind 可重复读
      buf.rewind();
      System.out.println("rewind");
      System.out.println(buf.position());
      System.out.println(buf.limit());
      System.out.println(buf.capacity());
      
      //clear 清空缓冲区,但是缓冲区数据依然存在
      buf.clear();
      System.out.println("clear");
      System.out.println(buf.position());
      System.out.println(buf.limit());
      System.out.println(buf.capacity());
   }

public void test2(){
   String str="abcde";
   ByteBuffer buf=ByteBuffer.allocate(1024);
   buf.put(str.getBytes());
  //切换读模式
   buf.flip();
   byte[] bst=new byte[buf.limit()];
   buf.get(bst,0,2);
   System.out.println(new String(bst,0,2));
   System.out.println(buf.position());
   //mark标记
   buf.mark();
   buf.get(bst,2,2);
   System.out.println(new String(bst,2,2));
   System.out.println(buf.position());
   //reset :恢复到mark的位置
   buf.reset();
   System.out.println(buf.position());
     }


内容概要:本文介绍了基于SMA-BP黏菌优化算法优化反向传播神经网络(BP)进行多变量回归预测的项目实例。项目旨在通过SMA优化BP神经网络的权重和阈值,解决BP神经网络易陷入局部最优、收敛速度慢及参数调优困难等问题。SMA算法模拟黏菌寻找食物的行为,具备优秀的全局搜索能力,能有效提高模型的预测准确性和训练效率。项目涵盖了数据预处理、模型设计、算法实现、性能验证等环节,适用于多变量非线性数据的建模和预测。; 适合人群:具备一定机器学习基础,特别是对神经网络和优化算法有一定了解的研发人员、数据科学家和研究人员。; 使用场景及目标:① 提升多变量回归模型的预测准确性,特别是在工业过程控制、金融风险管理等领域;② 加速神经网络训练过程,减少迭代次数和训练时间;③ 提高模型的稳定性和泛化能力,确保模型在不同数据集上均能保持良好表现;④ 推动智能优化算法与深度学习的融合创新,促进多领域复杂数据分析能力的提升。; 其他说明:项目采用Python实现,包含详细的代码示例和注释,便于理解和二次开发。模型架构由数据预处理模块、基于SMA优化的BP神经网络训练模块以及模型预测与评估模块组成,各模块接口清晰,便于扩展和维护。此外,项目还提供了多种评价指标和可视化分析方法,确保实验结果科学可信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值