转载:java IO流详解
来源:互联网 发布:合并会计报表软件 编辑:程序博客网 时间:2024/05/18 02:47
BufferedInputStream 和 BufferedOutputStream
一般打开(in/out)文件, 都加上缓冲流, 提高IO性能
DOS BOS FOS
应用程序 -- 处理流-->处理流-->输出流--> 文件(Byte)
writeInt(i) write() write(byte[]) ff ff ff fd
byte[]
1) BufferedInputStream/BufferedOutputStream也是处理流
BufferedInputStream(new FileInputStream(节点流))
BufferedOutputStream(new FileOutputStream(节点流))
2) BufferedInput/OutputSteam:提高了性能
3) Data流/Buffered流/File流
怎么结合使用?
DataInputStream in =
new DataInputStream(
new BufferedInputStream(
new FileInputStream(file)));
DataOutputStream out =
new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream(file)));
好处:既能扩展功能,又能提高性能
2 文件复制实现与优化
BufferedInputStream/BufferedOutputStream
//read(byte[] buf)/out.write(byte[] buf, 0, int size)
3 字符串的序列化(文字的编码方案)
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
4) GBK 中国国标,支持20000+ 中日韩英, 英文1位编码,
中文2位与unicode不兼容, 需要码表转换(散列表查询)
char[] = ['A','B','中'] //4e2d
GBK(GB2312): {41,42,d6,d0},
4 认识文本和文本文件
1) java的文本(char)是16位无符号整数, 是字符的
unicode编码
2) 文件是byte by byte 的数据序列
3) 文本文件是 文本char 序列按照某种(utf-8,
utf-16be, gbk)方案序列化为byte的存储结果.
5 字符流(Reader Writer)
1) 字符的处理, 一次处理一个字符(unicode)
2) 字符的底层仍然是基本的字节流
3) 字符流的基本实现:
InputStreamReader:完成byte流解析为char流, 按照
编码解析
OutputStreamWriter:提供char流到byte流, 按照
编码处理
4) 字符流的处理流
是字符读写的功能扩展, 极大的方便了文本的读写操作
BufferedReader : readLine()//一行一行的读取,
如果读取到文件的结尾,返回值是null
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");
6 对象的序列化: 将Object转换为byte序列,就是序列化,
反之叫反序列化
1) 序列化流, 是过滤流
ObjectOutputStream writeObject(Object)
序列化对象
ObjectInputStream readObject()
对象的反序列化
2) 序列化接口: 对象必须实现"序列化接口"才能进行
"序列化"否则出现不能序列化的异常!
3) JavaBean 规范, 必须实现Serializable接口
Java API中的类大多是Java Bean, 基本都实现了
Serializable
7 浅层复制与深层复制
1) Java的默认复制规则是浅层复制, 性能好, 隔离性差
浅层复制现象, 只复制第一层对象
2) 利用序列化实现深层复制
8.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()
- 转载:java IO流详解
- JAVA IO流详解
- Java IO流详解
- JAVA IO流 详解
- Java IO流详解
- Java IO流详解
- Java IO流详解
- JAVA IO流详解
- Java IO流详解
- java io流详解
- JAVA IO流详解
- Java IO流详解
- java IO流详解
- java io流详解
- java IO流 详解
- Java IO流详解
- Java IO流详解
- [转载]关于Java IO流学习总结
- vim常用键盘命令
- 关于图像缩小放大的2个结论
- explicit
- OpenCL性能优化实例研究系列2:避免Local Memory Bank Conflicts的两个简单方法
- linux下ip协议(V4)的实现(五)
- 转载:java IO流详解
- GDB多进程调试(转)
- 数据结构学习笔记(3.线性表之静态链表及柔性数组)
- 数据库中的日期转换
- 轻听-最好的解压助眠医疗轻音乐集
- ip层和4层的接口实现分析
- sgu491
- 第五章 初始化与清理
- 如何监控插入RICHEDIT中位图对象的鼠标点击事件?