JAVA I/O读书笔记

来源:互联网 发布:文字图片编辑软件 编辑:程序博客网 时间:2024/05/17 14:24

关键字:流,字节,字符,通道,缓冲区,持久化,序列化,交互,标准I/O,压缩

旧I/O包

字节流读写,字符流读写(请先分清字节与字符的差别)。
区别:后者更快,但某些东西只能用字节读写(大概取决于它的数据存储方式)
区分:Reader、Wirter结尾是字符流,Stream是字节流。JAVA针对各种类型读写做有专用类,例如:File~ String~ Buffer~ 注意带缓冲的往往读写效率更快一些(原因很简单,CPU为什么有缓存就是原因)

新I/O包

新I/O包有了很大的变化,提出了两个全新的概念:通道(channel),缓冲区,文件映射,效率提高了不少(到底快了多少,没验证过)。
所有类型的缓冲区(int、char等)底层都是ByteBuffer,一个固定大小的字节数组,它甚至支持改变字节的编码顺序(大端or小端)。
文件映射允许你将文件的某部分映射到缓冲区,这也表示了你可以对文件部分加锁,这使得多线程(进程)同时对一个文件进行读写操作成为可能。

序列化

序列化是一种轻量级的数据持久化技术,对于序列化来说,数据就是对象(万物皆对象不是吗)。
序列化会将对象转成字节序列放在某处,以便发送或存储。
序列化对于通信和保持对象的状态非常有用。
值得一提的是JAVA序列化会将指定对象所覆盖的对象网络全部序列化(通过引用去找到这些对象)。

Serializable与Externalizable

Serializable仅是一个标记接口,意为这个接口标记的对象要被序列化(默认为全部)即自动序列化。
Externalizable接口必须实现两个方法(读和写),这意味着必须手动选择对象内部的哪些东西应该被序列化。
transient关键字:表示这个引用的对象无需序列化,与Serializable接口连用。

标准I/O

System.in
System.out
System.err
后两者就是一个PrintStream(自动包装),前者必须手动包装成类。
JAVA也支持对压缩文件的读写操作。

0 0