我们通常创建实体类的时候都会习惯性的去实现serializable接口,那么,实现它有什么意义呢?自然就是为了能够序列化对象了,那么,为什么要对对象进行序列化呢?这与我们session有关。当开启一个会话的时候,web就会创建一个HttpSession对象,每一个对象都会占用一定的内存,如果同一个时间段内访问的用户太多,就会消耗大量的服务器内存,为了解决这样的问题,就引出了session持久化这样一个概念。

session持久化:web服务器会把暂时不活动并且没有失效的HttpSession对象转移到数据库或者文件系统中储存,服务器要再用时会把它们调取到内存。

通俗一点来说,当我们搬一个大型家具的时候,因为无法整个的通过门,那么我们会把这个家具拆分成一小部分,一小部分的,这样当我们把所有零件都搬过门的时候,再把这些零部件进行还原,还原成一个完整的家具。这就是序列化和反序列化的一个过程。实现序列化,也就是为了方便我们随取随存。减轻web浏览器的负担,进行序列化的数据可以在硬盘等存储设备中进行长期保存,这是序列化的主要用途之一。

序列化是指将对象转换为字节序列,反序列化是将字节序列转换为对象。主要用于在网络上进行数据间的传输使用。

某些私人的,不适合公开的字段可以使用transient关键字屏蔽,屏蔽的字段将不会进行序列化,可以保证秘密数据的安全性。

序列化主要用到的是ObjectOutputStream,ObjectInputStream

ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。ObjectInputStream代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。

只有实现了Serializable和Externalizable接口的类的对象才能被序列化。Externalizable接口继承自 Serializable接口,实现Externalizable接口的类完全由自身来控制序列化的行为,而仅实现Serializable接口的类可以 采用默认的序列化方式 。

对象序列化包括如下步骤:

1) 创建一个对象输出流,它可以包装一个其他类型的目标输出流,如文件输出流;

2) 通过对象输出流的writeObject()方法写对象。

对象反序列化的步骤如下:

1) 创建一个对象输入流,它可以包装一个其他类型的源输入流,如文件输入流;

2) 通过对象输入流的readObject()方法读取对象。

示例

Student st = new Student("Tom",'M',20,3.6);
File file = new File("O:\\Java\\com\\jieke\\io\\student.txt");
try
{
file.createNewFile();
}
catch(IOException e)
{
e.printStackTrace();
}
try
{
//Student对象序列化过程
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(st);
oos.flush();
oos.close();
fos.close();

//Student对象反序列化过程
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
Student st1 = (Student) ois.readObject();
System.out.println("name = " + st1.getName());
System.out.println("sex = " + st1.getSex());
System.out.println("year = " + st1.getYear());
System.out.println("gpa = " + st1.getGpa());
ois.close();
fis.close();
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}

 

ps:由于本人比较懒,示例是从网上找的,并非本人原创,只是为了方便理解给出的一个实例而已。不要太较真。

 

posted on 2018-05-17 18:04  土豆法克  阅读(72)  评论(0)    收藏  举报