一、java提供了对象流ObjectInputStream和ObjectOutputStream,可以将以对象方式存在于内存中的数据存储至文件,需要时在将其从文件中读出还原为对象,或者在网络上传送对象。
二、序列化指把内存中的java对象转换成与平台无关的二进制字节序列,以便永久保存在磁盘上或通过网络进行传输,是java提供的一种将对象写入到输出流并在之后将其读回机制。把java对象转换成字节序列的过程称为对象的序列化,把字节序列恢复为java对象的过程为反序列。
三、
public static void serial(Object obj, String path){//序列化
FileOutputStream fos = null;
ObjectOutputStream oos = null;
// ObjectInputStream ois = null;
try{
fos = new FileOutputStream(path);
oos = new ObjectOutputStream(fos);
oos.writeObject(obj);
oos.flush();
} catch(IOException e){
e.printStackTrace();
} finally{
try{
oos.close();
} catch (IOException e){
e.printStackTrace();
} try{
fos.close();
} catch(IOException e){
e.printStackTrace();
}
}
}
public static Object reverseSerial(String src){//反序列化
ObjectInputStream ois = null;
FileInputStream fis = null;
Object obj = null;
try {
fis = new FileInputStream(src);
ois = new ObjectInputStream(fis);
obj = ois.readObject();
// System.out.println(obj);
} catch (IOException e) {
e.printStackTrace();
} catch(ClassNotFoundException e){
e.printStackTrace();
}
return obj;
}
public class User implements Serializable {
public final static long serialVersionUID = 1L; // UID
/*transient*/ private int id; // transient 防止被序列化
private String name;
public User(){}
public User(int id,String name){
this.id = id;
this.name = name;
}
public String toString(){
return this.id + " " + this.name;
}
public void sayHi(){
System.out.println("User say Hi");
}//localClass
}
凡是实现Serializable接口的类都有一个表示序列化版本标识符的静态常量serialVersionUID,用来表明类的不同版本间的兼容性。