Object流
- 直接将Object写入或写出
- TsetObjectIO.java
- transient关键字
- serializable
- externalizable
序列化:直接将Object转换成字节流
serializable接口标记类的对象可以序列化,在序列化的时候,我们是无法控制的,是jdk帮你去实现序列化,如果我们想要自己来控制序列化,就得使用externalizable接口实现此接口。
这个接口有俩个方法,我们自己实现这俩个方法就可以自己来控制序列化的生成:
例子
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
/**
* 一.Object流
* ObjectOutputStream流/ObjectInputStream流
* 二.补充Externalizable(可外部化的)接口
* 作用:手动控制 序列可视化
* @Override
public void writeExternal(ObjectOutput out) throws IOException {
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
}
*/
public class TestObjectIO {
public static void main(String[] args) throws ClassNotFoundException {
T t=new T();
t.k=8;
try {//确定输出文件
FileOutputStream fos=new FileOutputStream("C:/Users/Desktop/Object.txt");
//给输出流套上ObjectOutputStream管道
ObjectOutputStream oos=new ObjectOutputStream(fos);
//将指定的对象写入ObjectOutputStream
oos.writeObject(t);
oos.flush();
oos.close();//关闭流
//从输出文件中读取信息
FileInputStream fis=new FileInputStream("C:/Users//Desktop/Object.txt");
//写入流上套上ObjectInputStream管道
ObjectInputStream ois=new ObjectInputStream(fis);
//从ObjectInputStream读取一个对象
T tReaded=(T) ois.readObject();//将其全部读出来,强制转换成T类型,
System.out.println(tReaded.i+" "+tReaded.j+" "+tReaded.d+" "+tReaded.k);//进行输出
} catch (IOException e) {
e.printStackTrace();
}
}
}
/*
* serializable(序列化)标记此类可序列化
* 如果要序列化,必须实现此接口,java中这个接口为标记性的接口,在这个接口中并没有定义方法
*/
class T implements Serializable
{
int i=0;
int j=9;
double d=2.3;
//关键字,透明的
//int k = 15;
transient int k=15;
//使用这个关键字,k运行结果为0,当这个关键字修饰成员变量时,在序列化的时候不做处理
}
我们来将IO流给整理一下
流 | 含义 |
---|---|
InputStream/OutputStream | 字节输入输出流 |
Reader/Writer | 字符输入输出流 |
FileInputStream/FileOutputStream | 对字节文件的输入输出流 |
FileReader/FileWriter | 对字符文件的输入输出流 |
BufferedInputStream/BufferedOutputStream | 带缓冲区的字节输入输出流 |
BufferedReader/BufferedWriter | 带缓冲区的字符输入输出流 |
ByteArrayInputStream/ByteArrayOutputStream | 对一个内存里的字节数组进行读写 |
InputStreamReader/OutputStreamWriter | 转换流 |
DataInputStream/DataOutputStream | 直接写最基础的数据类型 |
PrintStream/PrintWriter | 打印字节字符流 |
ObjectInputStream/ObjectOutputStream | Object流、序列化、掌握其中关键字及接口 |