powerdesigner 转为java实体对象时怎么序列化_Java_对象序列化 - osc_wpln0ly9的个人空间 - OSCHINA - 中文开源技术交流社区...
对象序列化指的是将在内存中保存的对象变为二进制数据流,这就意味着对象可以保存在文件中或者进行进行传输操作。但是并不是所有的类对象都可以被序列化,如果需要对象序列化,则这个类必须实现java.io.Serializable接口。但这个接口没有任何方法定义,因为其描述的是一种能力, 属于标识接口。范例:定义可以被序列化的类import java.io.Serializable;@SuppressWar
对象序列化指的是将在内存中保存的对象变为二进制数据流,这就意味着对象可以保存在文件中或者进行进行传输操作。但是并不是所有的类对象都可以被序列化,如果需要对象序列化,则这个类必须实现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类。
范例: 序列化对象:
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虽然可以保证属性不被序列化,但很少出现
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)