1 综合运用处理流
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream in = new DataInputStream(bis);
FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos);
DataOutputStream out = new DataOutputStream(bos);
2 字符串的序列化(文字的编码方案)
1) Stirng 字符串本质上是char[] 将char[]转换成
byte序列就是字符串的编码, 就是字符串的序列化问题
char是16位无符号整数, 值是unicode编码
(怎么解决中文乱码问题)
2) utf-16be 编码方案, 将16位char从中间切开为
2个byte.utf-16be 是 将unicode char[] 序列化
为byte[] 的编码方案 能够支持65535 个字符编码,
英文浪费空间
char[] = ['A','B','中']
byte[] = [00, 41, 00, 42, 4e, 2d]
3) UTF-8 编码方案 采用变长编码 1~N方案, 其中英文
1个byte,中文3个byte
char : 16位 中文 英文
byte : 8位
4) GBK 中国国标,支持20000+ 中日韩英,英文一位编码,
中2位与unicode不兼容, 需要码表转换(散列表查询)
char[] = ['A','B','中'] //4e2d
GBK(GB2312): {41,42,d6,d0},
案例: io3.Demo2
5 认识文本和文本文件
1) java的文本(char)是16位无符号整数, 是字符的
unicode编码
2) 文件是byte by byte 的数据序列
3) 文本文件是 文本char 序列按照某种(utf-8,
utf-16be, gbk)
方案序列化为byte, 的存储结果.
案例: io3.Demo2
6 字符流(Reader Writer)
1) 字符的处理, 一次处理一个字符(unicode)
2) 字符的底层仍然是基本的字节流
3) 字符流的基本实现:
InputStreamReader:完成byte流解析为char流,
按照编码解析
OutputStreamWriter:提供char流到byte流,
按照编码处理
案例: io3.Demo3
字符流的处理流
4) 字符流的过滤器
是字符读写的功能扩展, 极大的方便了文本的读写操作
BufferedReader : readLine()
BufferedWriter :
PrintWriter: println()
5)读取一个文本文件:
InputStream is =
new FileInputStream("gbk.txt");
Reader in = new InputStreamReader(is);
BufferedReader reader =
new BufferedReader(in);
or
BufferedReader in = new BufferedReader(
new FileReader(filename));
6) 写出一个文本文件:
PrintWriter out =
new PrintWtirer(new FileWriter(filename));
or
PrintWriter out =
new PrintWtirer(
new OutputStreamWriter(
new FileOutputStream(filename)));
7) 系统的默认编码 中文一般是GBK
String encoding=
System.getProperty("file.encoding");
7 对象的序列化: 将Object转换为byte序列,就是序列化,
反之叫反序列化
1) 序列化流, 是过滤流
ObjectOutputStream writeObject(Object)
序列化对象
ObjectInputStream readObject()
对象的反序列化
2) 序列化接口: 对象必须实现"序列化接口"才能进行
"序列化"
否则出现不能序列化的异常!
3) JavaBean 规范, 必须实现Serializable接口
Java API中的类大多是Java Bean, 基本都实现了
Serializable
Serializable标记性接口:标识作用,表示实现这个接口
对象可以序列化,没有任何的方法实现,java中最特殊的一个
接口
8 浅层复制与深层复制
1) Java的默认复制规则是浅层复制, 性能好,
隔离性差浅层复制现象, 只复制第一层对象
2) 利用序列化实现深层复制
案例:io3.Demo6Card(复制纸牌)
9.Java IO 总结
1)是一种数据操作模型: 把任何数据都作为Byte的有序
集合看待逐一处理的方式方式叫做流.
Java 流模型, 是byte by byte 是数据集合
data : 41 42 00 00 ff ff d6 d0
index : 0 1 2 3 4 5 6 7 8
pointer: ^
2) 文件流是流的一种
InputStream --- FileInputStream
|- ByteArrayInputStream
3) Byte流是最基本的流操作
InputStream Byte输入流
OutputStream Byte输出流
4) 流动最基本实现: 节点流
FileInputStream
ByteArrayInputStream
等....
5) 最基本的流操作: read() write()
10 流的过滤器(处理流,扩展io流功能,或者提高其性能)
1) 流的过滤器是: 流的功能扩展: 需要基于基本的流
2) 一类是: 基本byte数据的处理
BufferedInputStream
ZipInputStream
JarInputStream
3) 一类是: 数据序列化功能扩展
DataInputStream 基本类型的IO
ObjectInputStream 对象IO
InputStreamReader String(char[])
FIS BIS ISR BR
文件(Byte 序列)--输入流--> 过滤器--过滤器 --> 过滤器 --> 应用程序
[7f ff ff ff] read() read() read()->char readLine()->String
阅读(728) | 评论(0) | 转发(0) |