java serializable xstream enternalizable 三种序列化
Seriable
package com.dasenlin.seriable;
import java.io.Serializable;
public class Person implements Serializable {
/**
*
*/
private static final long serialVersionUID = -9182958142109396588L;
private String name;
private Integer age;
public Person() {
super();
}
public Person(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
package com.dasenlin.seriable;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
public class WritePerson {
public static void main(String[] args) {
FileOutputStream fileout=null;
ObjectOutputStream out=null;
try {
fileout = new FileOutputStream("src/myperson.bin");
out = new ObjectOutputStream(fileout);
Person p = new Person("zz",20);
out.writeObject(p);
System.out.println("序列化完成");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(null!=fileout)fileout.close();
if(null!=out)out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
package com.dasenlin.seriable;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;
public class ReadPerson {
public static void main(String[] args) {
String path="src/myperson.bin";
FileInputStream infile =null;
ObjectInputStream in =null;
try {
infile = new FileInputStream(path);
in= new ObjectInputStream(infile);
Person p = (Person) in.readObject();
System.out.println(p.getName());
System.out.println(p.getAge());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally{
try {
if(infile !=null)infile.close();
if(in !=null)in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Xstream
package com.dasenlin.seriable;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;
import com.thoughtworks.xstream.XStream;
public class ReadPerson {
public static void main(String[] args) {
String path="src/myperson.xml";
FileInputStream infile =null;
XStream in=null;
try {
infile = new FileInputStream(path);
in=new XStream();
ArrayList<Person> p= (ArrayList<Person>) in.fromXML(infile);
if(null!=p){
for(Person pt:p){
System.out.println(pt.getName()+":"+pt.getAge());
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{
try {
if(infile !=null)infile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
package com.dasenlin.seriable;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import com.thoughtworks.xstream.XStream;
public class WritePerson {
private static List <Person> li = new ArrayList<>();
public static void main(String[] args) {
initData();
String path="src/myperson.xml";
FileOutputStream fileout=null;
XStream out=null;
try {
fileout = new FileOutputStream(path);
out = new XStream();
out.toXML(li,fileout);
System.out.println("序列化完成");
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{
try {
if(null!=fileout)fileout.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void initData(){
for(int i=0;i<8;i++){
Person p = new Person("student"+i,i);
li.add(p);
}
}
}
Externalizable 控制序列化
package com.dasenlin.seriable;
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.Date;
/**
*控制对象序列化和反序列
*/
public class Userinfo implements Externalizable {
public String username;
public String userpass;
public Integer userage;
public Userinfo() {
}
public Userinfo(String username, String userpass, Integer userage) {
this.username = username;
this.userpass = userpass;
this.userage = userage;
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
System.out.println("现在执行序列化方法");
Date d =new Date();
out.writeObject(d);
out.writeObject(username);
out.writeObject(userpass);
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
System.out.println("执行反序列化");
Date d=(Date)in.readObject();
this.username=(String)in.readObject();
this.userpass=(String)in.readObject();
}
@Override
public String toString() {
return "Userinfo [username=" + username + ", userpass=" + userpass + ", userage=" + userage + "]";
}
}
package com.dasenlin.seriable;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Test {
public static void serializa(String filename){
try {
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(filename));
Userinfo user =new Userinfo("admin","5555",20);
out.writeObject("user");
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void deserialize(String filename){
try {
ObjectInputStream in = new ObjectInputStream(new FileInputStream(filename));
Userinfo user = (Userinfo)(in.readObject());
System.out.println(user.toString());
in.close();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
//serializa("test.txt");
//System.out.println("序列化完毕");
deserialize("test.txt");
System.out.println("反序列化完毕");
}
}