1 字节流
- 基类
- InputStream
- OutputStream
文件输出流
- FileInputStream
- FileoutputStream
- 构造方法 ( File file ) 和 ( String fileName ) 文件对象或者文件名
- ```java // 输出流单个字节写入 int readData; while ((readData = fis.read()) != -1) { fos.write(readData); }
// 输出流数组写入 int len; byte[] by = new byte[1024]; while ((len = fis.read(by)) != -1) { fos.write(by,0,len); }
// 输出流字符串转数组写入 String line = sc.nextLine(); fos.write(line.getBytes()); ```
缓冲输出流
- BufferedInputStream
- BufferedOutputStream
- 构造方法( InputStream in )和 ( InputStream in, int size ) 缓冲区8KB,带缓冲的一定记得 flush() 刷新!!!
其他要点
out.write(System.lineSeparator().getBytes()); //实现换行
FileOutputStream(fileName,true); //文件追加
// try-with-resources
try(资源,实现了AutoCloseable接口的资源){
// 代码
// 执行完之后会去自动执行close方法去释放资源
}catch{}
装饰器模式:参考 设计模式.md 文件
2 字符流
- 基类
- Reader
- Writer
- 转换流
- InputStreamReader
- OutputStreamWriter
- 构造方法 ( OutputStream out ) 和 ( OutputStream out , String charsetName ) 字节流对象和编码集
- 简化流
- FileReader
- FileWriter
- 构造方法 ( File file ) 和 ( String fileName ) 文件对象或者文件名
- 缓冲流
- BufferedReader
- BufferedWriter
- 构造方法 ( Writer out ) 和 ( Writer out , int sz ) 默认缓冲区16KB,可以自定义缓冲区
- 其他要点
- 编码表
- ASCII:1个字节的低7位
- ISO8859-1:1个字节(的8位)
- GBK:2个字节代表一个中文
- UTF-8:3个字节代表一个中文
- ANSI:简体中文环境下默认是GBK
- 编码与解码
```java String s = “小可爱”; byte[] bytes = s.getBytes(); System.out.println(Arrays.toString(bytes)); //[-27, -80, -113, -27, -113, -81, -25, -120, -79] //一个byte是1字节,UTF-8使用3个字节代表一个汉字
- 编码表
byte[] bytes = s.getBytes(“GBK”); System.out.println(Arrays.toString(bytes)); //[-48, -95, -65, -55, -80, -82]
- 独有的方法
- readLine() 读取一行
- writeLine() 写入一行
<a name="afc937a1"></a>
#### 3 数据流
- 数据流
- DataInputStream
- DataOutputStream
- 构造方法 ( OutputStream out )
- 其他要点
- 每一种基本的数据类型都有独自的方法与其对应 readInt()、writeInt()
- 按照什么样的顺序写 一定要按照什么样的顺序读取!!!
<a name="f2c37ad5"></a>
#### 4 打印流
- 打印流
- PrintStream
- PrintWriter
- 其他要点
-
```java
// 标准输入输出流
PrintStream out = System.out;
InputStream in = System.in;
- 开启自动刷新后哪一种不会自动刷新
- 启动自动刷新 println -> write() + newLine() + flush()
- 启动自动刷新 write() -> write()+ flush()
5 对象流
- 对象流
- ObjectInputStream
- ObjectOutputStream
- 对象流只能读取对象流生成的文件,如果原始空文件报 EOFException,先用对象流写入null对象再读取
- 用transient关键字保证成员变量不被序列化