转换流
OutputStreamWriter(字符流转向字节流的桥梁)
- 1.将程序中的字符 按照 创建转换流时给出的编码格式 去查对应的码表(GBK就去查GBK格式的码表)
- 2.将查到的两个或三个字节 交给创建转换流时 传入的字节流
- 3.最终时 使用字节流 将文件写入
InputStreamReader(字节流转向字符流的桥梁)
- 1.先按字节读 读完用转换流去查询对应的编码表
2.最终以字符的形式读取到程序中
编码格式
- mac 默认 UTF-8 一个中文3个字节
- win 默认 GBK 一个中文2个字节
1.读GBK
FileInputStream fis = new FileInputStream(“/Users/lanou/Desktop/Test/wl123.txt”);
InputStreamReader isr = new InputStreamReader(fis,"GBK");
char[] b = new char[1024];
int len = 0;
while ((len = isr.read(b)) != -1) {
System.out.println(new String(b,0,len));
}
isr.close();
2.//转换流写个GBK格式的文件
//文件字节流
FileOutputStream fos = new FileOutputStream(“/Users/lanou/Desktop/Test/wl123.txt”);
//编码格式 大小写都行
OutputStreamWriter osw = new OutputStreamWriter(fos, “GBK”);
//写入
osw.write(“世间安得双全法,不负如来不负卿!”);
osw.close();
缓冲流(高效流)
- 缓冲字节流
- BufferedOutputStream
- 默认缓冲区大小: 8k
- 内部自带一个缓冲数组
1.//创建一个缓冲流
FileOutputStream fos = new FileOutputStream("/Users/lanou/Desktop/Test/缓冲流.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
//写入
bos.write("123".getBytes());
bos.close();
2.//缓冲流读取
FileInputStream fis = new FileInputStream(“/Users/lanou/Desktop/Test/缓冲流.txt”);
BufferedInputStream bis = new BufferedInputStream(fis);
byte[] b = new byte[1024];
int len = 0;
while ((len = bis.read(b)) != -1) {
System.out.println(new String(b, 0, len));
}
bis.close();
流 总结:
- 字节流
- 字符流
- 转换流
- 高效流
明确操作的文件是源文件还是目标文件?
- 源文件 读文件 输入流 InputStream Reader
- 目标文件 写文件 输出流 OutputStream Writer
Properties集合(双列集合 是Hashtable的子类)
- 该集合 是唯一一个能和IO流有关系的集合
- 注意:一般该集合之存储 字符串类型的键值对
- load:将文件直接读入到集合中
- store:将集合中的键值对直接写入到文件中
读取文件的格式
- key=value
- 注意:
- 1.等号前后不能加空格
- 2.一般该文件使用.properties后缀(起标识作用)
- 3.#号为注释
序列化流(反序列化流 对象流)
- 将对象直接写入到文件中
- ObjectOutputStream
- ObjectInputStream
阻止成员变量序列化
- 1.static 修饰成员变量
- 2.使用关键字 transient(瞬态) 标识成员变量
解决序列化ID冲突的方案
将序列化号写死
只要类中存在序列化号 系统将不会重新生成