java——IO流整理(一)
一、基础
1.字节、字符
- 位(bit) :二进制中的一个1或0称为1位
- 字节(byte) :8个二进制位称为一个字节
- 字符 :一个自然符号称为字符。英文符号(1个字节)、中文符号(2个字节)
2.编码格式
- ASCII :有256字符组成,内部包含了对英文、符号及数字的定义
- GB2312 :扩展后的中文字符集。内部包含了2万多个中文字符
- ISO-8859-1 : 欧美字符集
- Unicode :包含了所有字符的字符集。内容有双字节组成
- Utf-8 : 包含了大部分字符的字符集。实际使用中应用比较广泛的字符集
二、IO
1.概述
IO是Input Output的缩写,表示输入与输出。IO按照不同的方式可以包含如下分类
- 流
文件在读取或传输过程中连续的内容就称为流。
2. 内容读取方式
字节流方式和字符流方式
3. 按照方向划分
输入流(从源到程序称为输入流)和输出流(从程序到目标源称为输出流)
2. 字节流方式处理
1.输入流
- FileInputStream :按照字节流方式对内容进行读取(不适用缓存)
- BufferedInputStream :按照字节方式对内容进行读取(使用了缓存)
- DataInputStream :按照类型对内容进行读取
- ObjectInputStream :按照对象的类型进行数据的读取(反序列化过程中必须使用)
- ByteArrayInputStream : 提供一个byte型的输入缓冲区
2.输出流
- FileOutputStream :对内容进行输出(未使用缓冲区)
- BufferedOutputStream :使用缓冲区对内容进行输出
- DataOutputStream :对内容按照类型进行存储
- ObjectOutputStream :对对象进行存储(序列化过程必须使用)
- PrintStream :功能与OutputStream相似,但是提供了更加丰富的输出方式
- ByteArrayOutputStream :对输出内容提供一个缓冲区
3. 字节流方式处理
1. 输入流
- FileReader
- BufferReader
- CharArrayReader
- StringReader
2. 输出流
- FileWriter
- BufferWriter
- CharArrayWriter
- StringWriter
- PrintWriter
3.常见方法
- Read() :读取内容
- Write() :向媒体中写入内容
- Flush() :刷新缓冲区,强制将内容写入到文件中
- Close() :关闭当前对象
三、 序列化与反序列化
1.持久化存储
将对象的内容进行长期的保存(对象内容时存储在内存中的,随着程序的关闭对象的信息也会丢失)。通过将对象的内容写入到文件中以实现文件内容的持久化保存
2.序列化及反序列化
2.1. 概念
- 序列化
将对象存储到文件的过程就成为序列化。
- 反序列化
将文件中的内容转换为对象的过程就成为反序列化
2.2. 要求
- 只有实现了Serializable接口的类才具有可序列化的能力
- 如果类中使用了其他的类,则该类也必须实现Serializable接口
- Static的内容是不会被序列化的(因为static成员是属于类的)
- 如果对象中的某个属性不需要被序列化可以是transient进行修饰
- 属性的访问修饰符是无法被序列化的
- 不同版本的序列化文件无法兼容
2.3. 实现步骤
1) 自定义类并实现Serializable接口
2) 创建ObjectOutput(Input)Stream对象
3) 通过对象进行读取或写入
4) 关闭流对象
2.4. 优点
以二进制形式存在,所以具有与平台无关性的特点(可以在各种平台上使用)。
2.5. 应用
- 网络中对象数据的传输(Socket通信)
- 对象的持久化保存