本帖最后由 sun2ice 于 2018-1-4 17:32 编辑
# day 10
##System的类字段
* 类字段
* 静态的成员变量
* err 标准的错误输出流
* `PrintStream OutPutStream的子类`
* in 标准的输入流
* InPutStream 类
* out 标准的输出流
* `PrintStream OutPutStream的子类`
* String--->byte[];
* getBytes();
* byte[]--->String
* String (byte{} b)
##转换流
* 转换流:把字节流转成字符流:
```
InputStreamReader:把字节输入流转成字符输入流.
//创建输入流对象
Reader r = new InputStreamReader(System.in);
分析上面
InputStream is = System.in;
Reader r = new InputStreamReader(is);
//创建输出流对象
FileWriter fw = new FileWriter("a.txt");
```
```
//创建输入流对象
BufferedReader br = new BufferedReader(new FileReader("SystemInOutDemo.java"));
//创建输出流对象
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
分析上面
//OutputStream os = System.out;
//Writer w = new OutputStreamWriter(System.out);//多态,父类型引用指向子类对象
//BufferedWriter bw = new BufferedWriter(w);
```
* 为什么有字节转字符流,没有字符转字节流.
```
字节流可以操作一切文件(纯文本文件/二进制文件).
字符流是用来操作中文纯文本使用的,本身是对字节流的增强.
```
##打印流
PrintStream 字节打印流(暂时不写)
PrintWriter 字符打印流
* 只有输出流
可以自动换行 println()
不能输出byte字节
可以配置自动刷新(调用println print printf)
也是包装流没有写出功能
可以把字节输出流转换为字符输出流
关流不会抛异常
* 打印流
* 构造方法
* `PrintWriter(String filepath)`
* `PrintWriter(Writer out, boolean autoFlush)`: 创建对象, 同时设置是否自动刷新
* `PrintWriter(OutputStream out, boolean autoFlush)`: 创建对象, 同时设置是否自动刷新
* 成员方法
* `void write(String s)`: 写一个字符串
* `void print(String s)`: 输出字符串, 没有换行
* `void println(String s)`: 输出字符串并换行. 如果启动了自动刷新, 则会执行自动刷新写入数据
* `void printf(Locale l, String format, Object... args)`: 使用指定格式字符串和参数将格式化的字符串写入输出流. 如果启动了自动刷新, 则会执行自动刷新写入数据
* `void format(Locale l, String format, Object... args)`: 使用指定格式字符串和参数将格式化的字符串写入输出流. 如果启动了自动刷新, 则会执行自动刷新写入数据
```
##对象操作流程
可以用于操作任意类型的对象
* `ObjectInputStream`: 对象输入流 只能将支持 java.io.Serializable 接口的对象写入流中
* 构造方法:
* `ObjectInputStream(InputStream in)`: 创建对象输入流
* 成员方法
* `Object readObject()`: 从对象输入流读取对象, 一次只读取一个对象. 当读不到时抛出`EOFException`
* `ObjectOutputStream`: 对象输出流
* 构造方法:
* `ObjectOutputStream(OutputStream out)`: 创建对象输出流
* 成员方法
* `void writeObject(Object o)`: 将对象写入对象输出流
```
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("a.txt"));
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("a.txt"));
```
使用对象输出流写出对象,只能使用对象输入流来读取对象
只能将支持 java.io.Serializable 接口的对象写入流中
##Properties集合
* Properties概述(键=值,注释用#)
* 每个键和其对应的值都是一个字符串
* 空参构造
* Properties: [p'rɒpətɪz], 配置文件集合类, 可与IO结合使用
* 构造方法
* `Properties Properties()`
* 成员方法
* 可以使用Map的方法
* `String getProperty(String key)`: 根据键获取值. 如果找不到该键, 则返回null
* `String getProperty(String key, String defaultValue)`: 根据键获取值, 如果值不存在, 则使用指定的默认值
* `void setProperty(String key, String value)`: 设置键值对
* `void load(InputStream in)`: 从字节输入流中读取Properties
* `void load(Reader reader)`: 从字符输入流中读取Properties
* `void list(PrintStream out)`: 将Properties输出到指定的字节打印输出流. 会自动加一个`-- listing properties --`文件头
* `void list(PrintWriter out)`: 将Properties输出到指定的字符打印输出流. 会自动加一个`-- listing properties --`文件头
* `void store(Writer writer, String comments)`: 将Properties输出到指定的输出流, 并添加一个注释. 如果不想要注释可传null. 无论有没有注释, 都会添加时间字符串的注释
* `void store(OutputStream os, String comments)`: 同上, 只是流不同
##编码表
* 把计算机底层的二进制数字转成字符
* 常见编码表
```
IO流的总结和梳理:
文件流:
FileInputStream
FileOutputStream
FileReader
FileWriter
缓冲流:
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
转换流(把字节转换为字符):
InputStreamReader
InputStreamReader isr = new InputStreamReader(System.in);
FileWriter fw =new FileWriter("a.txt");
OutputStreamWriter
BufferedReader br= new BufferedReader(new FileReader("a.txt"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
对象流(序列化和反序列化):
ObjectInputStream
ObjectOutputStream
打印流:
PrintStream
PrintWriter
|
|