关闭

Java对象序列化的概念和实现

发表于:2012-10-15 09:54

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:woshixuye111    来源:51Testing软件测试网采编

  一、序列化的概念和实现方法

  序列化的概念就是把一个Object直接转换成为字节流写到硬盘或者网络上。Java序列化技术可以将一个对象的状态写入一个Byte流里,并且可以从其它地方把该Byte流里的数据读出来,重新构造一个相同的对象。这种机制允许将对象通过网络进行传播,并可以随时把对象持久化到数据库、文件等系统里。Java的序列化机制是RMI、EJB等技术的技术基础。

  用途是利用对象的序列化实现保存应用程序的当前工作状态,下次再启动时将自动地恢复到上次执行的状态,例如游戏的存盘。

  序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象 传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

  序列化的实现——将需要被序列化的类实现Serializable接口,根据需求读出或者写入对象,看以下的例子。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.net.URISyntaxException;
import cn.Test.FileInputAndOutputStream;

public class ObjectIO
{
 // 将对象写入文件
 public static void Output(String path)
 {
  Student s = new Student();
  s.num = 2;
  s.name = "xy2";
  s.address = "goodPlace2";
  s.wifeName = "nobody2";
  File f = new File(path);
  FileOutputStream fout = null;
  ObjectOutputStream bout = null;
  try
  {
   fout = new FileOutputStream(f);
   bout = new ObjectOutputStream(fout);
   bout.writeObject(s);
   bout.flush();
   bout.close();
  }
  catch (IOException e)
  {
   e.printStackTrace();
  }
 }
 // 将写入的对象读出
 public static void Input(String path)
 {
  File f = new File(path);
  FileInputStream fin = null;
  ObjectInputStream bin = null;
  try
  {
   fin = new FileInputStream(f);
   bin = new ObjectInputStream(fin);
   Student s = (Student) bin.readObject();
   System.out.println(s.num + "..." + s.name
                       + "..." + s.address + "..." + s.wifeName);
  }
  catch (Exception e)
  {
   e.printStackTrace();
  }
 }
 // writeObject和readObject是线程安全的,传输过程中不允许被并发访问,故对象能不断传来
 public static void main(String[] args) throws URISyntaxException
 {
  String path = FileInputAndOutputStream.class.getClassLoader()
                       .getResource("对象文档.txt").toURI().getPath();
  Output(path);
  Input(path);
 }
}
@SuppressWarnings("serial")
class Student implements Serializable
{
 int num = 1;
 String name = "xy";
 String address = "goodPlace";
 transient String wifeName = "nobody";
}

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号