课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > 【昆明java培训】Java序列化接口示例
  • 【昆明java培训】Java序列化接口示例

    发布:昆明Java培训      来源:达内新闻      时间:2016-02-28


  • 序列化一种标记接口,不需要实现任何字段和方法,这就像是一种选择性加入的处理,通过它可以使类对象成为可序列化的对象。

    昆明java培训讲师表示,java序列化处理是通过ObjectInputStream ObjectOutputStream实现的,因此我们所要做的是基于它们进行一层封装,要么将其保存为文件,要么将其通过网络发送。我们来看一个简单的序列化示例。

    package com.journaldev.serialization;

    import java.io.Serializable;

    public class Employee implements Serializable {

    // private static final long serialVersionUID = -6470090944414208496L;

    private String name;

    private int id;

    transient private int salary;

    // private String password;

    @Override

    public String toString(){

    return "Employee{name="+name+",id="+id+",salary="+salary+"}";

    }

    //getter and setter methods

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    public int getId() {

    return id;

    }

    public void setId(int id) {

    this.id = id;

    }

    public int getSalary() {

    return salary;

    }

    public void setSalary(int salary) {

    this.salary = salary;

    }

    // public String getPassword() {

    // return password;

    // }

    //

    // public void setPassword(String password) {

    // this.password = password;

    // }

    }

    昆明java培训提醒注意一下,这是一个简单的java bean,拥有一些属性以及getter-setter 方法,如果你想要某个对象属性不被序列化成流,你可以使用transient关键字,正如示例中我在salary变量上的做法那样。

    现在昆明java培训假设需要把我们的对象写入文件,之后从相同的文件中将其反序列化,因此我们需要一些工具方法,通过使用ObjectInputStream ObjectOutputStream来达到序列化的目的。

    package com.journaldev.serialization;

    import java.io.FileInputStream;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.ObjectInputStream;

    import java.io.ObjectOutputStream;

    /**

    * A simple class with generic serialize and deserialize method implementations

    *

    * @author pankaj

    *

    */

    public class SerializationUtil {

    // deserialize to Object from given file

    public static Object deserialize(String fileName) throws IOException,

    ClassNotFoundException {

    FileInputStream fis = new FileInputStream(fileName);

    ObjectInputStream ois = new ObjectInputStream(fis);

    Object obj = ois.readObject();

    ois.close();

    return obj;

    }

    // serialize the given object and save it to file

    public static void serialize(Object obj, String fileName)

    throws IOException {

    FileOutputStream fos = new FileOutputStream(fileName);

    ObjectOutputStream oos = new ObjectOutputStream(fos);

    oos.writeObject(obj);

    fos.close();

    }

    }

    注意一下,方法的参数是Object,它是任何Java类的基类,这样写法以一种很自然的方式保证了通用性。

    现在我们来写一个测试程序,看一下Java序列化的实战。

    package com.journaldev.serialization;

    import java.io.IOException;

    public class SerializationTest {

    public static void main(String[] args) {

    String fileName="employee.ser";

    Employee emp = new Employee();

    emp.setId(100);

    emp.setName("Pankaj");

    emp.setSalary(5000);

    //serialize to file

    try {

    SerializationUtil.serialize(emp, fileName);

    } catch (IOException e) {

    e.printStackTrace();

    return;

    }

    Employee empNew = null;

    try {

    empNew = (Employee) SerializationUtil.deserialize(fileName);

    } catch (ClassNotFoundException | IOException e) {

    e.printStackTrace();

    }

    System.out.println("emp Object::"+emp);

    System.out.println("empNew Object::"+empNew);

    }

    }

    昆明java培训机构小伙伴运行以上测试程序,可以得到以下输出。

    emp Object::Employee{name=Pankaj,id=100,salary=5000}

    empNew Object::Employee{name=Pankaj,id=100,salary=0}

    由于salary是一个transient 变量,它的值不会被存入文件中,因此也不会在新的对象中被恢复。类似的,静态变量的值也不会被序列化,因为他们是属于类而非对象的。

    推荐文章

上一篇:关于java语言的开源,你怎么看?

下一篇:Java中J2ME是什么?

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56