IO笔记

1. File代表与平台无关的文件和目录,新建、删除、重命名文件和目录。

2. 输入流:InputStream,Reader;输出流:OutputStream,Writer

3. 字节流,字符流;节点流,处理流。装饰器模式。

4. 处理流封装节点流,屏蔽底层设备节点流的差异,提供更加方便的输入输出方法。

    节点流:构造器参数是物理IO节点

    处理流:构造器参数是已存在的节点流

5. 输出文本内容,使用PrintStream包装输出节点流。只关闭处理流即可,系统会自动关闭被包装的节点流。

    读取文本内容,使用BufferedReader包装输入节点流。例:BufferedReader(new InputStreamReader(System.in))

6. 输入/输出的内容是文本,考虑使用字符流;输入/输出内容是二进制内容,考虑使用字节流。

7. 两个转换流:InputStreamReader,OutputStreamWriter。字节流转成字符流

8. System.setErr(),重定向标准错误输出。

    System.setIn(),重定向标准输入。

    System.setOut(),重定向标准输出。

9. RandomAccessFile,文件内容访问类,可以任意访问文件内容。

10. 对象序列号机制允许把内存中的java对象转换成平台无关的二进制流,可以在网络或磁盘上传输。

11. 目标类实现Serializable接口,方可序列化。

12. 序列化的步骤:

      1. 创建一个ObjectOutputStream

      2. 调用ObjectOutputStream对象的writeObject()方法

13. 反序列化的步骤:

     1. 创建一个ObjectInputStream

     2. 调用ObjectInputStream的readObject()方法

14. 反序列化无须通过构造器初始化对象。

15. 如果一个可序列化类有多个父类,则该类的所有父类要么是可序列化的,要么有无参数的构造器。

16. 含有引用类型的类,引用类型是可序列化的,类才可以序列化。

17. 同一个对象,只被序列化一次,后续序列化,只使用序列化编号。如果多次序列同一个java对象,只有第一次序列化才会把对象转换成字节流并输出。

18. 通过在属性前面加上transient关键字,可以指定java序列化时无须理会该属性。transient只能用来修饰属性,不能修饰其他。

19. 自定义序列化的几个方法,写在被序列化的类中。系统在序列化某个对象之前,会先调用writeRelpace和writeObject方法。反序列化时,调用readObject和readResolve

      1. writeReplace();

      2.  writeObject();

      3. readObjectNoData();

      4. readObject();

      5. readResolve();

20. 早期的单例类和枚举类在反序列化后,会生成新的对象,为保证和序列化前的对象一致,需要提供readResolve方法。

21. 序列化版本兼容问题,使用序列化ID。新类修改方法和静态属性,不影响反序列化,不用修改序列化serialVersionUID。如果修改非静态属性,同名,不同类型,反序列化         失败,需跟新serivalVersionUID。新类比序列化对象流中的属性 多,或者少 都可以正常反序列化,无须更新serivalVersionUID。

22. java 新io采用内存映射文件的方式来处理输入输出,新IO把文件或文件的一段映射到内存中,比传统的输入输出快很多。

23. Channel和Buffer是新IO中两个核心类。新IO系统中,所有数据都要经过Channel,传统的面向流处理,新IO面向块处理。Buffer可以理解成一个容器,发送到Channel中数        据和从Channel中读取的数据都要先放到Buffer中。还有字符串映射到Charset类,以及非阻塞式输入输出的Selector类。

24. Buffer是抽象类,其子类有XXXBuffer。其中ByteBuffer和CharBuffer最常用。Buffer中常用的三个重要概念:

      容量:capacity

      界限:limit

      位置:position

     三者关系:0 <= position <= limit <= capacity

25. Buffer中包含两个重要方法:flip和clear,flip为从Buffer中取出数据做好准备,clear则向Buffer中装入数据做好准备。clear不清空buffer中的数据。

26. Buffer还包含put和get方法,用于向Buffer中放入数据和取出数据。

27. Channel可以直接将文件的部分或全部映射成Buffer,Channel只能和Buffer交互。Channel通过传统节点流InputStream,OutputStream的getChannel获得。

28. Channel中最常用的三类方法是:map,read和write;map用于将Channel对应的部分或全部数据映射到ByteBuffer;read和write用于从Buffer中读数据或写数据。

29. 把明文的字符序列转换成计算机理解的字节序列(二进制文件),称为编码;把字节序列转化成普通人能看懂的明文字符串,称为解码。

30. Charset.availableCharsets()可以取代所支持的字符集。

       Charset csCn = Charset.forName("GBK");

       csCn.new Encoder().encode() / new Decoder().decode();

       Charset自身也含有decode和encode方法,进行编码和解码。

31. String的getBytes方法,就是使用特定字符集将字符串转成字节序列。

【论文复现】一种基于价格弹性矩阵的居民峰谷分时电价激励策略【需求响应】(Matlab代码实现)内容概要:本文介绍了一种基于价格弹性矩阵的居民峰谷分时电价激励策略,旨在通过需求响应机制优化电力系统的负荷分布。该研究利用Matlab进行代码实现,构建了居民用电行为与电价变动之间的价格弹性模型,通过分析不同时间段电价调整对用户用电习惯的影响,设计合理的峰谷电价方案,引导用户错峰用电,从而实现电网负荷的削峰填谷,提升电力系统运行效率与稳定性。文中详细阐述了价格弹性矩阵的构建方法、优化目标函数的设计以及求解算法的实现过程,并通过仿真验证了所提策略的有效性。; 适合人群:具备一定电力系统基础知识和Matlab编程能力,从事需求响应、电价机制研究或智能电网优化等相关领域的科研人员及研究生。; 使用场景及目标:①研究居民用电行为对电价变化的响应特性;②设计并仿真基于价格弹性矩阵的峰谷分时电价激励策略;③实现需求响应下的电力负荷优化调度;④为电力公司制定科学合理的电价政策提供理论支持和技术工具。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,深入理解价格弹性建模与优化求解过程,同时可参考文中方法拓展至其他需求响应场景,如工业用户、商业楼宇等,进一步提升研究的广度与深度。
针对TC275微控制器平台,基于AUTOSAR标准的引导加载程序实现方案 本方案详细阐述了一种专为英飞凌TC275系列微控制器设计的引导加载系统。该系统严格遵循汽车开放系统架构(AUTOSAR)规范进行开发,旨在实现可靠的应用程序刷写与启动管理功能。 核心设计严格遵循AUTOSAR分层软件架构。基础软件模块(BSW)的配置与管理完全符合标准要求,确保了与不同AUTOSAR兼容工具链及软件组件的无缝集成。引导加载程序本身作为独立的软件实体,实现了与上层应用软件的完全解耦,其功能涵盖启动阶段的硬件初始化、完整性校验、程序跳转逻辑以及通过指定通信接口(如CAN或以太网)接收和验证新软件数据包。 在具体实现层面,工程代码重点处理了TC275芯片特有的多核架构与内存映射机制。代码包含了对所有必要外设驱动(如Flash存储器驱动、通信控制器驱动)的初始化与抽象层封装,并设计了严谨的故障安全机制与回滚策略,以确保在软件更新过程中出现意外中断时,系统能够恢复到已知的稳定状态。整个引导流程的设计充分考虑了时序确定性、资源占用优化以及功能安全相关需求,为汽车电子控制单元的固件维护与升级提供了符合行业标准的底层支持。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值