昆明java培训
达内昆明广州春城路

18487146383

热门课程

【昆明java培训】Java序列化接口示例

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


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

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

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培训假设需要把我们的对象写入文件,之后从相同的文件中将其反序列化,因此我们需要一些工具方法,通过使用ObjectInputStreamObjectOutputStream来达到序列化的目的。

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培训教你实现JSP页面跳转简易方法,120天后月薪过万

昆明Java培训告诉你java和大数据和互联网发展中起什么作用

昆明java培训:初学者学Java Script 5个小技巧

昆明java培训多久可以学会?120天教你成为java开发大神!

选择城市和中心
贵州省

广西省

海南省

扫一扫

了解更多干货