IO流2
- 节点流 直接接在数据上 FileInputStream FileOutputStream
FileinputStream 的read() 一个字节一个字节读取: 中文中占2个字节
- 1字符流 读写文本文件,
图片,视频,音频 二进制文件 字节流 万能流
FileReader 文件的字符输入流
常用方法:
int | read() |
int | read(char[] cbuf) |
abstract int | read(char[] cbuf, int off, int len) |
字节输入流的方法:
int | read() |
int | read(byte[] b) |
int | read(byte[] b, int off, int len) |
FileWriter 文件的字符输出流
…
1.2 内存流
ByteArrayInputStream:
构造方法:
ByteArrayInputStream(byte[] buf) |
ByteArrayInputStream(byte[] buf, int offset, int length) |
常用方法:
void | close() |
int | read() 从buf数组读取一个字节 |
int | read(byte[] b, int off, int len) 从buf数组中读取一个字节,存储在b的数组,从off开始, |
ByteArrayOutputStream:
ByteArrayOutputStream() |
ByteArrayOutputStream(int size) size表示创建的byte数组的长度 |
常用方法:
void | write(byte[] b, int off, int len) |
void | write(int b) |
byte[] | toByteArray() |
String | toString() 把byte数组转换为字符串 |
void | close() |
2.处理流: 这种流不能直接接在数据,只能嵌套在其他IO流, 提供更加方便的方法
2.1 缓冲流 带缓冲区(就是一个byte数组), 提高效率
BufferedInputStream BufferedOutputStream 字节缓冲流
BufferedReader BufferedWriter 字符缓冲流
// 有没有一种输入流, 读取一行, 返回这一行的字符串
BufferedReader 的 readLine()
构造方法:
BufferedReader(Reader in) 需要一个字符输入流, 默认的缓冲区大小8KB
BufferedReader(Reader in, int sz) sz sz:就是byte的数组的长度
char[] ch = new char[8192]; 以字节 8192/1024 = 8KB
//有没有一种输出流, 直接在文件中输出一个换行符 \n
BufferedWriter 的newLine()
2.2 转换流 字节流 转换 字符流
InputStreamReader: 把字节输入流转换为字符输入流, 本身就是Reader的子类
InputStreamReader(InputStream in)
OutputStreamWriter: 把字节输出流转换为字符输出流,本身是Writer的子类
OutputStreamWriter(OutputStream out)
2.3 打印流 输出流
输出流:
write(int b)
write(byte[] b)
write(char[ ] c)
write(String str)
double d = 12.2;
1.字节打印流: PrintStream print() println()
2.字符打印流: PrintWriter
System.out.print()
System.out.println()
提供print(任意数据类型) println(任意数据类型)
PrintStream(OutputStream out) |
PrintStream(OutputStream out, boolean autoFlush) |
PrintWriter:
PrintWriter(OutputStream out) autoFlush默认值false |
PrintWriter(OutputStream out, boolean autoFlush) |
2.4 对象流: 读写一个一个对象
ObjectInputStream : 对象输入流, Object readObject() 读取一个对象
ObjectOutputStream: 对象输出流, writeObject(Object o )写一个对象
学生管理系统:
学生à 数组 (固定长度)
à集合 à 保存到内存, 程序一旦关闭, 数据就没有
- 把学生保存到文件(持久化) IO流 à ObjectIO流
- 学生信息保存到数据库
抛出: java.io.NotSerializableException: les06.Student
序列化: 把java对象 转换为 流 二进制 ObjectOutputStream
反序列化: 把二进制转换为java对象 ObjectInputStream
Java对象默认不支持序列化, 使用ObjectOutputStream进行序列化操作,抛出NotSerializableException
解决方案: 让java对象支持序列化, 在需要序列化的java对象的类上,实现 java.io.Serializable接口,他是一个标志接口,没有方法