1、
class User implements Serializable{
String name;
int age;
public User(String name,int age)
{
this.name=name;
this.age=age;
}
public String toString()
{
return "The user name is "+name+",the user age is "+age;
}
}
public class Hello {
public static void main(String[] args) throws Exception{
User user=new User("May", 18);
//序列化
ObjectOutputStream objectOutputStream =new ObjectOutputStream(new FileOutputStream("G:\\user.txt"));
objectOutputStream.writeObject(user);
objectOutputStream.flush();
if(objectOutputStream!=null)
objectOutputStream.close();
//反序列化
ObjectInputStream objectInputStream =new ObjectInputStream(new FileInputStream("G:\\user.txt"));
Object aObject=objectInputStream.readObject();
System.out.println(aObject);
if(objectInputStream!=null)
objectInputStream.close();
}
}
控制台输出:
2、
class User implements Serializable{
String name;
int age;
public User(String name,int age)
{
this.name=name;
this.age=age;
}
public String toString()
{
return "The user name is "+name+",the user age is "+age;
}
}
序列化:
import java.io.*;
import java.util.*;
import java.text.*;
public class Hello {
public static void main(String[] args)throws Exception{
User user=new User("May", 18);
//序列化
ObjectOutputStream objectOutputStream =new ObjectOutputStream(new FileOutputStream("G:\\user.txt"));
objectOutputStream.writeObject(user);
objectOutputStream.flush();
if(objectOutputStream!=null)
objectOutputStream.close();
}
}
反序列化:
import java.io.FileInputStream;
import java.io.ObjectInputStream;
public class Test {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
//反序列化
ObjectInputStream objectInputStream =new ObjectInputStream(new FileInputStream("G:\\user.txt"));
Object aObject=objectInputStream.readObject();
System.out.println(aObject);
if(objectInputStream!=null)
objectInputStream.close();
}
}
序列化之后删除User.class,反序列化不成功,反序列化要用到User.class文件
序列化之后更改User.java并对其重新编译,反序列化不成功,因为序列化版本号已发生改变
自己手动添加序列化版本号,而不需要系统自动添加,以避免这种情况
User.java增加序列化版本号属性
class User implements Serializable{
String name;
int age;
final static long serialVersionUID=1111L;
public User(String name,int age)
{
this.name=name;
this.age=age;
}
public String toString()
{
return "The user name is "+name+",the user age is "+age;
}
}
不想参与序列化的属性用transient修饰,只记录默认值
class User implements Serializable{
transient String name;
transient int age;
final static long serialVersionUID=1111L;
public User(String name,int age)
{
this.name=name;
this.age=age;
}
public String toString()
{
return "The user name is "+name+",the user age is "+age;
}
}