JAVASE-API-10-IO流2(转换流、打印流、合并流、序列化/反序列化流)Properties、Junit、RandomAccessFile、1.5新特性(静态导入、可变参数、枚举)--D19

复习:
1、 IO:用于传输数据的机制
a) 根据传输方向:输入、输出
b) 根据传输形式:字符、字节
c) 根据作用:节点流(只能直接操作数据的来源或者目的地)、处理流(在别的流的基础上进行额外的功能操作)
d) 四个基本流都是抽象类
e) 流中的异常处理:
i. 将流对象方法在try之外声明并且赋值为null,然后放在try之内进行初始化
ii. 在关流之前判断流对象是否为null
iii. 关流之后需要将流对象置为null
iv. 写完数据之后关流之前需要进行手动冲刷
f) 装饰模式:利用同类对象来构建当前类的对象,然后对功能进行增强或者改善


转换流:

在字符流和字节流之间进行转换
转换流是字符流,处理流
OutputStreamWriter:将字符流转换为字节流
在这里插入图片描述
写数据的时候以字符形式来传入 - - - 转换流是一个字节流,但是构建转换流的时候需要传入一个字节流,实际写数据的流是出入的字节流;转换输出流- - -将字符转换为字节,如果没有指定编码,那么默认使用当前工程的编码。

InputStreamReader:将字节流转化为字符流
如果没有指定编码,那么默认使用当前工程的编码
在这里插入图片描述
转换流是一个字符流,读取出来的数据是字符形式,但是真正底层读取数据的是字节流;转换流- - 将字节转换成字符。


InputStreamReader:
在这里插入图片描述

OutputStreamWriter:
在这里插入图片描述

练习:从控制台获取一行数据
BufferedReader – InputStreamReader – System.in

注意:系统流在使用的时候不要关流(因为是静态常量),流一旦关闭是无法打开的
在这里插入图片描述



打印流

PrintStream/PrintWriter—输出流、节点流、处理流(既是节点流也是处理流)
System.out本质上就是一个打印流
在这里插入图片描述


合并流

将多个流来合成一个流—SequenceInputStream—合并流只有输入流没有输出流
SequenceInputStream:在构建的时候需要传入一个Enumeration对象-需要先将要合并的流放入Vector集合中,然后利用elements方法来产生Enumeration对象,然后构建合并流。
在这里插入图片描述


序列化/反序列化流(重点)

序列化:将对象转化为字节数组的过程(ObjectOutputStream)
反序列化:将字节数组还原回对象的过程(ObjectInputStream)
在这里插入图片描述
在这里插入图片描述

ObjectOutputStream:
在这里插入图片描述

ObjectInputStream:
在这里插入图片描述


Properties

可以进行持久化(将对象序列化之后存储到磁盘上)的映射。键和值的类型都是String。
Properties对象在序列化的时候必须存储到.preperties文件中。properties文件默认编码是西欧编码,意味着Properties文件不兼容中文。如果在Properties文件中输入中文就会自动转化为对应的编码形式。
在项目中,Properties文件经常作为配置文件使用

在这里插入图片描述
在这里插入图片描述

Junit- - 单元测试

第一次使用的时候需要导入Junit测试库
单元测试在使用的时候要求方法做到三点:没有参数,没有返回值(返回值类型为void),非静态的
如果在某个之前执行加上@Before注解,在之后执行加上@After注解

导入Junit测试库:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


RandomAccessFile

是一个操作文件的类,可以利用这个类对文件进行读写 - - 双向流
在操作文件的时候将文件看做一个大型的字节数组,通过position来操作指定的位置
在这里插入图片描述


JDK1.5的部分特性

自动封箱/拆箱、增强for循环、泛型
静态导入、可变参数、枚举、注解、反射(JDK1.4出现,1.5加强)、动态代理、内省、并发包…

  1. 静态导入
    Import static 包名.类名.静态方法名;
    优点:提高加载效率
    缺点:书写麻烦,降低代码的可读性;如果本类或者父类中有方法签名一致的方法,会导致静态导入无效;如果用到了同一个类下的多个方法,静态导入比较复杂。
    在这里插入图片描述

  2. 可变参数
    用…来定义可变参数。可变参数在使用的时候可以传入任意个数的参数;可变参数本质上是一个数组,所以是通过操作数组的方式来操作可变参数。
    可变参数必须定义在参数列表的末尾,也就意味着一个参数列表最多只能定义一个可变参数
    在这里插入图片描述

  3. 枚举
    适用于取值固定并且能够一一列举的场景:星期,月份,季节,等级…
    用enum来定义枚举(枚举本质上依然是一个类)。枚举类中的构造方法默认是私有的,枚举常量必须放在枚举类的首行。
    枚举类中可以定义一切类型的方法和属性,包括抽象方法
    枚举类中可以重载的构造方法,也可以提供含参构造
    在java中,所有枚举的顶级父类是Enum
    从JDK1.5开始, switch – case 允许使用枚举常量
    在这里插入图片描述
    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值