JavaIO流-对象流
2021-04-06 13:26
标签:作用 zab nbsp auth over public 通过 imp rri JavaIO流-对象流 标签:作用 zab nbsp auth over public 通过 imp rri 原文地址:https://www.cnblogs.com/orzjiangxiaoyu/p/13399424.htmlimport org.junit.Test;
import java.io.*;
/**
* 对象流
* 序列化
* 反序列化
*
*
* 要求对象所属的类必须是可序列化的
* 对象的序列化机制
* 作用:用于存储和读取基本数据类型数据或对象的处理
*
* @author orz
*/
public class ObjectInputOutput {
/**ObjectInputStream序列化
* 序列化过程:将内存中的java对象保存到磁盘中或通过网络传输出去
*/
@Test
public void test1()throws IOException
{
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("object.dat"));
oos.writeObject(new String("我爱北京天安门"));
oos.flush();
oos.writeObject(new Person("王明",23));
oos.flush();
oos.close();
}
/**
* //ObjectOutputStream反序列化
* 反序列化
*/
@Test
public void test2()
{
ObjectInputStream ois=null;
try {
ois=new ObjectInputStream(new FileInputStream("object.dat"));
Object obj=ois.readObject();
String str=(String)obj;
System.out.println(str);
Person p=(Person) ois.readObject();
System.out.println(p);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally {
try {
if (ois != null) {
ois.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//NotSerializableException
//要想一个java对象是可序列化的需要满足如下;要求
//1.该类必须实现接口Serializable
//2.提供一个全局常量:serialVersionUID
//3.除了当前,类需要实现Serializable接口之外,还必须保证其内部所有属性也必须是可序列化的(默认情况下,基本数据类型可序列化)
//补充:ObjectInputStream、ObjectOutputStream不能序列化static\transient修饰的成员
//标识接口
class Person implements Serializable
{
public static final long serialVersionUID=4567894567L;
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name=‘" + name + ‘\‘‘ +
", age=" + age +
‘}‘;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}