缓冲流
- 字节缓冲流:
BufferedInputStream
,BufferedOutputStream
- 字符缓冲流:
BufferedReader
,BufferedWriter
- 基本原理:创建对象的同时创建一个缓冲区数组,使用缓冲区可以提高IO操作的效率。
构造方法:
// 缓冲输入流
public BufferedInputStream(InputStream in)
// 缓冲输出流
public BufferedOutputStream(OutputStream out)
转换流
转换流是字节与字符间的桥梁!
- 转换流:
InputStreamReader
,OutputStreamWriter
InputStreamReader
读取字节码,并根据指定字符集将字节解码成字符OutputStreamWriter
使用指定的 charset 将字符编码成字节。
构造方法:
// 使用默认字符集的字符流
InputStreamReader(InputStream in)
// 使用指定字符集的字符流
InputStreamReader(InputStream in, String charsetName)
- 示例
public class InputStreamReaderDemo {
public static void main(String[] args) throws IOException {
//演示字节转字符流的转换流
readCN();
}
public static void readCN() throws IOException{
//创建读取文件的字节流对象
InputStream in = new FileInputStream("D:\\test\\cn8.txt");
//创建转换流对象
//InputStreamReader isr = new InputStreamReader(in);这样创建对象,会用本地默认码表读取,将会发生错误解码的错误
InputStreamReader isr = new InputStreamReader(in,"utf-8");
//使用转换流去读字节流中的字节
int ch = 0;
while((ch = isr.read())!=-1){
System.out.println((char)ch);
}
//关闭流
isr.close();
}
}
public static void writeCN() throws Exception {
//创建与文件关联的字节输出流对象
FileOutputStream fos = new FileOutputStream("D:\\test\\cn8.txt");
//创建可以把字符转成字节的转换流对象,并指定编码
OutputStreamWriter osw = new OutputStreamWriter(fos,"utf-8");
//调用转换流,把文字写出去,其实是写到转换流的缓冲区中
osw.write("你好");//写入缓冲区。
osw.close();
}
序列化
java.io.ObjectOutputStream
类,将Java对象的原始数据类型写出到文件,实现对象的持久存储。
构造方法
// 创建一个指定OutputStream的ObjectOutputStream
public ObjectOutputStream(OutputStream out)
- 功能:
ObjectInputStream readObject()
ObjectOutputStream writeObject()
- 关键字:瞬态
transient
- 序列化需要满足的条件
- 该类必须实现
java.io.Serializable
接口,Serializable
是一个标记接口,不实现此接口的类将不会使任何状态序列化或反序列化,会抛出NotSerializableException
。 - 该类的所有属性必须是可序列化的。如果有一个属性不需要可序列化的,则该属性必须注明是瞬态的,使用
transient
关键字修饰。
- 示例
public class ObjectStreamDemo {
public static void main(String[] args) throws IOException, ClassNotFoundException {
/*
* 将一个对象存储到持久化(硬盘)的设备上。
*/
writeObj();//对象的序列化。
}
public static void writeObj() throws IOException {
//1,明确存储对象的文件。
FileOutputStream fos = new FileOutputStream("tempfile\\obj.object");
//2,给操作文件对象加入写入对象功能。
ObjectOutputStream oos = new ObjectOutputStream(fos);
//3,调用了写入对象的方法。
oos.writeObject(new Person("wangcai",20));
//关闭资源。
oos.close();
}
}
反序列化
java.io.ObjectInputStream
类,将之前使用ObjectOutputStream序列化的原始数据恢复为对象。
构造方法
// 创建一个指定InputStream的ObjectInputStream
public ObjectInputStream(InputStream in)