powerdesigner 转为java实体对象时怎么序列化_Java_对象序列化 - osc_wpln0ly9的个人空间 - OSCHINA - 中文开源技术交流社区...

对象序列化指的是将在内存中保存的对象变为二进制数据流,这就意味着对象可以保存在文件中或者进行进行传输操作。但是并不是所有的类对象都可以被序列化,如果需要对象序列化,则这个类必须实现java.io.Serializable接口。

但这个接口没有任何方法定义,因为其描述的是一种能力, 属于标识接口。

范例:定义可以被序列化的类

import java.io.Serializable;

@SuppressWarnings("serial")classPerson implements Serializable{privateString name;private intage;public Person(String name,intage) {this.name =name;this.age =age;

}publicString toString() {return "Person [name =" + name + ",age =" + age + "]";

}

}

以后Person类就可以传输或保存在文件之中了。

要进行序列化操作,必须依靠java.io.ObjectOuputStream类。

d24d63c5fdb2cbd5be33457f7387c4e1.png

范例: 序列化对象:

import java.io.File;

import java.io.FileOutputStream;

import java.io.ObjectOutputStream;

import java.io.Serializable;

@SuppressWarnings("serial")classPerson implements Serializable{privateString name;private intage;public Person(String name,intage) {this.name =name;this.age =age;

}publicString toString() {return "Person [name =" + name + ",age =" + age + "]";

}

}public classHello{public static voidmain(String[] args) throws Exception {

ser(new Person("asdf",21));

}public static voidser(Person per) throws Exception {

ObjectOutputStream oos= new ObjectOutputStream(new FileOutputStream("F:" + File.separator + "person.ser"));

oos.writeObject(per);

oos.close();

}

}

结果生成person.ser文件。这种序列化代码是固定的,所以这样的开发操作以后不需要开发者自己处理

可是这个文件看不懂,想还原要反序列化

反序列化

利用ObjectInputStream。

构造:public ObjectInputStream(InputStream in) throws IOException;

当取得了ObjectInputStream类之后可以利用下列方法实现反序列化

public final Object readObject() throws IOException, ClassNotFoundException

范例:反序列化

import java.io.File;

import java.io.FileInputStream;

import java.io.ObjectInputStream;

import java.io.Serializable;

@SuppressWarnings("serial")classPerson implements Serializable{privateString name;private intage;public Person(String name,intage) {this.name =name;this.age =age;

}publicString toString() {return "Person [name =" + name + ",age =" + age + "]";

}

}public classHello{public static voidmain(String[] args) throws Exception {

dser();

}public static voiddser() throws Exception {

ObjectInputStream ois= new ObjectInputStream(new FileInputStream("F:" + File.separator + "person.ser"));

Object obj=ois.readObject();

System.out.println(obj);

ois.close();

}

}

结果输出文件里的内容

ObjectOutputStream输出的信息只能够通过ObjectInputStream读取

transient关键字

默认情况一个对象中的所有属性都一定要被序列化下来,如果某些属性不希望序列化,可以使用transient定义

范例:

private transient int age;

序列化操作中age将不被保存。由于transient关键字的作用,当数据被反序列化后,此数据为其对应数据的默认值

总结:

我们关心的只有java.io.Serializable接口,几乎简单java类都要实现此接口

ObjectOutputStream、ObjectInputStream很少由我们自己操作

transient虽然可以保证属性不被序列化,但很少出现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值