首页 > 开发 > 综合 > 正文

谈谈J2SE中的序列化之一个感性的认识

2024-07-21 02:15:02
字体:
来源:转载
供稿:网友
注册会员,创建你的web开发资料库,

  java中处处体现着简单的程序设计风格,序列化作为最常用的功能之一,在java中的设计尤为“简单”。在objectinputstream 和objectoutputstream的帮助下,我们可以轻松的实现序列化。

  只要我们的class 实现了java.io.serializable接口,就可以利用objectoutputstream的writeobject()方法将一个对象序列化;利用objectinputstream的readobject()方法,可以返回读出的object对象。serializable接口不需要我们实现任何方法。

  以下是一个例子,它能给我们一个感性的认识:

  serial实现了就java.io.serializable接口,是需要序列化的类。我们首先构造一个serial的对象serial1然后将其保存(序列化)在一个文件中,而后再将其读出(反序列化),并打印其内容。

  package stream;

/**
* @author favo yang
*/

import java.io.*;

public class serial implements serializable {
 int company_id;
 string company_addr;
 boolean company_flag;
 public serial(){}//不同于c++,没有也可以
 public serial(int company_id,string company_addr,boolean company_flag) {
  this.company_id=company_id;
  this.company_addr=company_addr;
  this.company_flag=company_flag;
 }

 public static void main(string[] args) {
  serial serial1 = new serial(752,"dayer street #5 building 02-287",false);//构造一个新的对象
  fileinputstream in=null;
  fileoutputstream out=null;
  objectinputstream oin=null;
  objectoutputstream oout=null;
  try {
   out = new fileoutputstream("5.txt");
   oout = new objectoutputstream(out);
   serial1.serialize(oout);//序列化
   oout.close();
   oout=null;
   in = new fileinputstream("5.txt");
   oin = new objectinputstream(in);
   serial serial2 = serial.deserialize(oin);//反序列化
   system.out.println(serial2);//打印结果
  } catch (exception ex){
   ex.printstacktrace();
  } finally{
   try {
    if (in != null) {
     in.close();
    }
    if (oin != null) {
     oin.close();
    }
    if (out != null) {
     out.close();
    }
    if (oout != null) {
     oout.close();
    }
   } catch (ioexception ex1) {
    ex1.printstacktrace();
   }
  }
 }

 /**
  * deserialize
 */

 public static serial deserialize(objectinputstream oin) throws exception{
  serial s=(serial)oin.readobject();
  return s;
 }

 public string tostring() {
  return "data: "+company_id+" "+company_addr+" "+company_flag;
 }

 /**
 * serialize
 */

 public void serialize(objectoutputstream oout) throws exception{
  oout.writeobject(this);
 }
}


  运行结果:

  data: 752 dayer street #5 building 02-287 false

  正确打印了结果。

  现在序列化的功能还没有被j2me支持,所以我们在j2me中是使用datainputstream、dataoutputstream配合rms或者网络实现序列化。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表