java序列化与反序列化

来源:互联网 发布:linux安装ruby环境 编辑:程序博客网 时间:2024/05/24 06:08

1.序列化到txt文件中

//Person.java


package com.huowolf.api;import java.io.Serializable;/* * 把对象转换为字节序列的过程称为对象的序列化。 * 把字节序列恢复为对象的过程称为对象的反序列化。 *  * 任何类型只要实现了Serializable接口,就可以被保存到文件中, * 或者作为数据流通过网络发送到别的地方。 * 也可以用管道来传输到系统的其他程序中。 *  * 想要实现序列化的类都应该实现该接口 * transient:非静态数据不想被序列化可以使用这个关键字修饰。  */public class Person implements Serializable{private static final long serialVersionUID = 952L;private String userName;private String password;private int age;public Person(String userName, String password, int age) {super();this.userName = userName;this.password = password;this.age = age;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}

//SerializationDemo.java

package com.huowolf.api;/* * 需求:在D盘创建文件“user.txt"应用对象序列化知识将用户信息保存到文件中, * 之后将对象读入修改密码后在写回文件(用户包括用户名,密码,年纪3个属性) */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.util.Scanner;public class SerializationDemo {public  static void readObj() throws Exception {ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d:\\user.txt"));Person p = (Person) ois.readObject();System.out.println("用户名:"+p.getUserName()+"  密码:"+p.getPassword()+"  年龄:"+p.getAge());ois.close();}public static void writeObj(Person p) throws FileNotFoundException, IOException {ObjectOutputStream oos =  new ObjectOutputStream(new FileOutputStream("d:\\user.txt"));oos.writeObject(p);oos.close();}public static void main(String[] args) throws Exception  {Scanner sc = new Scanner(System.in);Person p = new Person("小红","111111",18);writeObj(p);readObj();System.out.println("请输入修改的密码:");String word = sc.nextLine();sc.close();p.setPassword(word);System.out.println(p.getUserName()+" "+p.getPassword()+" "+p.getAge());writeObj(p);}}


2.序列化到XML文件中


//SerializeXmlDemo .java

package com.huowolf.api;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import com.thoughtworks.xstream.XStream;/* * 序列化、反序列化为XML文件,使用了XStream来序列化, * 需要引入xstream-1.4.7.jar包的支持, * http://xstream.codehaus.org/download.html  处可以下载jar, * 然后引入到Eclipse中的build path中。 */public class SerializeXmlDemo {//序列化到xml文档public static void serializeToXml() throws IOException {Person[] myPerson = new Person[2];        myPerson[0] = new Person("Jay","1111",24);        myPerson[1] = new Person("Tom","2222",23);                XStream xstream = new XStream();         FileOutputStream fos = new FileOutputStream("myPerson.xml");        xstream.toXML(myPerson,fos);               System.out.println(xstream.toXML(myPerson)); }//反序列化xml文档public static void deSerializeFromXm() throws IOException {XStream xs = new XStream();        Person[] myPerson = null;                FileInputStream fis = new FileInputStream("myPerson.xml");   myPerson=(Person[])xs.fromXML(fis);                       if (myPerson != null) {         for (int i=0;i<myPerson.length;i++) {         System.out.println("用户名:"+myPerson[i].getUserName()+"  密码:"+myPerson[i].getPassword()+"  年龄:"+myPerson[i].getAge());         }        }}public static void main(String[] args) throws Exception {serializeToXml();deSerializeFromXm();}}

此程序输出结果:

<com.huowolf.api.Person-array>  <com.huowolf.api.Person>    <userName>Jay</userName>    <password>1111</password>    <age>24</age>  </com.huowolf.api.Person>  <com.huowolf.api.Person>    <userName>Tom</userName>    <password>2222</password>    <age>23</age>  </com.huowolf.api.Person></com.huowolf.api.Person-array>用户名:Jay  密码:1111  年龄:24用户名:Tom  密码:2222  年龄:23


加油!每一天!


0 0
原创粉丝点击