<!-- Generated by javadoc (build 1.5.0_03) on Mon May 29 11:19:21 CST 2006 -->
<noscript></noscript>
JAVADOC摘录:类通过实现 java.io.Serializable
接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。
仅在子类型扩展的类有一个可访问的无参数构造方法
来初始化该类的状态时,才可以假定子类型有此责任。如果不是这种情况,则声明一个类为可序列化类是错误的。该错误将在运行时检测到。
<!-- Generated by javadoc (build 1.5.0_03) on Mon May 29 11:19:21 CST 2006 -->
<noscript></noscript>
在序列化和反序列化过程中需要特殊处理
的类必须使用下列准确签名来实现特殊方法:
private void writeObject(java.io.ObjectOutputStream out)
throws IOException
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException;
<!-- Generated by javadoc (build 1.5.0_03) on Mon May 29 11:19:21 CST 2006 -->
<noscript></noscript>
将对象写入流时需要指定要使用的替代对象的可序列化类
,应使用准确的签名来实现此特殊方法:
ANY-ACCESS-MODIFIER Object writeReplace() throws ObjectStreamException;
此 writeReplace 方法将由序列化调用,前提是如果此方法存在,而且它可以通过被序列化对象的类中定义的一个方法访问。因此,该方法可以拥有私有
(private)、受保护的 (protected) 和包私有 (package-private) 访问。子类对此方法的访问遵循 java 访问规则。
在从流中读取类的一个实例时需要指定替代的类应使用的准确签名来实现此特殊方法。
ANY-ACCESS-MODIFIER Object readResolve() throws ObjectStreamException;
此 readResolve 方法遵循与 writeReplace 相同的调用规则和访问规则。
<!-- Generated by javadoc (build 1.5.0_03) on Mon May 29 11:19:21 CST 2006 -->
<noscript></noscript>
序列化运行时使用一个称为 serialVersionUID
的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。如果接收者加载的该对象的类的
serialVersionUID 与对应的发送者的类的版本号不同,则反序列化将会导致 InvalidClassException
。可序列化类可以通过声明名为
"serialVersionUID"
的字段(该字段必须是静态 (static)、最终 (final) 的
long
型字段)显式声明其自己的 serialVersionUID:
主要知识点:
1.序列化要实现此接口
2.可以通过writeObject,readObject实现自定义的序列化
3.可以通过writeReplace,readResolve替换序列化方法
package com.sunrain.serialize;
import java.io.*;
import java.io.ObjectInputStream.GetField;
import java.io.ObjectOutputStream.*;
public class Person implements Serializable{
private String name;
private int age;
private boolean sex;
public Person(String name){
this.name = name;
}
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "name:"+name+";\nage="+age+";\nsex="+sex;
}
private void writeObject(ObjectOutputStream out) {
try {
PutField field = out.putFields();
field.put("name", name);
System.out.println("加密前: name = " + name);
// 模拟加密
name = name + "1";
field.put("name", name);
out.writeFields();
} catch (IOException e) {
e.printStackTrace();
}
}
private void readObject(ObjectInputStream in) {
try {
GetField field = in.readFields();
name = (String) field.get("name", "");
System.out.println("读取的原始name = " + name);
// 模拟解密
name = name.substring(0, name.length() - 1);
System.out.println("解密后的name = " + name);
} catch (Exception e) {
e.printStackTrace();
}
}
Object writeReplace() throws ObjectStreamException{
return new Person("ttandzz");
}
Object readResolve() throws ObjectStreamException{
return new Person("and");
}
}
package com.sunrain.serialize;
import java.io.Serializable;
public class Man extends Person implements Serializable {
public Man(String name) {
super(name);
}
private static final long serialVersionUID = 1L;
@Override
public String toString() {
return super.toString();
}
}
package com.sunrain.serialize;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class SerializeTest {
/**
* @Description:
* @param args
* @return void
* create by sunrain on 2011-10-30
* @throws IOException
* @throws FileNotFoundException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
Man p = new Man("nnn");
p.setAge(10);
p.setName("zzz");
p.setSex(true);
ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("t.tmp"));
o.writeObject(p);
o.close();
ObjectInputStream i = new ObjectInputStream(new FileInputStream("t.tmp"));
Person m = (Person) i.readObject();
System.out.println(m.toString());
}
}
分享到:
相关推荐
java.io.Serializable序列化问题
java.lang.Throwable (implements java.io.Serializable) java.lang.Exception java.lang.RuntimeException com.opensymphony.xwork2.XWorkException (implements com.opensymphony.xwork2.util.location.Locatable...
import java.io.Serializable; @SuppressWarnings("serial") //一个类要想实现序列化则必须实现Serializable接口 class Person implements Serializable { private String name; private int age; public ...
java.util.HashMap,V> (implements java.lang.Cloneable, java.util.Map,V>, java.io.Serializable) java.util.LinkedHashMap,V> (implements java.util.Map,V>) org.springframework.core.annotation....
第一、将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将该类注解为@Embeddable,最后在主类中(该类不包含联合主键类中的字段)保存该联合主键类的一个引用,并...
import java.io.Serializable; import java.util.HashMap; import java.util.Map; import com.google.gson.JsonObject; import com.google.gson.JsonArray; import net.sf.json.JSONObject; import org.apache....
主要介绍了java 中序列化NotSerializableException问题解决办法的相关资料,这里对序列化问题进行描述说明,并提供解决办法,希望能帮助到大家,需要的朋友可以参考下
class Student implements java.io.Serializable{ String number,name,specialty,grade,borth,sex; public Student(){}; public void setNumber(String number){ this.number=number;} public String getNumber(){ ...
被传递的对象需要先实现序列化,而序列化对象有两种方式:java.io.Serializable和android.os.Parcelable Java中使用的是Serializable,而谷歌在Android使用了自定义的Parcelable。 两种序列化方式的区别: 1.在...
导入java.io.Serializable; 导入java.security.AccessController; 导入java.security.AuthProvider; 导入java.security.InvalidParameterException; 导入java.security.Key; 导入java.security....
java.io.Serializable, java.lang.Cloneable, java.util.EventListener, nc.vo.gl.vouchervaluechange.ValueChangeListener, nc.vo.glpub.IVoAccess -----------------------------------------------------------...
import java.io.Serializable; public class Message implements Serializable { private static final long serialVersionUID = 1L; private String fileName; // 文件名称 private long fileLength; // ...
Java序列化(java.io.Serializable) Hadoop序列化的特点 Hadoop的序列化格式:Writable 序列化格式特点: 紧凑:高效使用存储空间。 快速:读写数据的额外开销小 可扩展:可透明地读取老格式...
3.6.12 java.io .Serializable Permission 39 3.6.13 java.security.Security Permission 39 3.6.14 java.security.AllPermission 40 3.6.15 许可权隐含中的隐含 40 3.7 分配许可权 41 3.8 Protection Domain 42 ...
public class Student implements java.io.Serializable { String number,name,discipling,grade,borth,sex; public Student() { } public void setNumber(String number) { this.number=number; } public ...
3.6.12 java.io .Serializable Permission 39 3.6.13 java.security.Security Permission 39 3.6.14 java.security.AllPermission 40 3.6.15 许可权隐含中的隐含 40 3.7 分配许可权 41 3.8 Protection Domain 42 ...
public class Phonenote implements java.io.Serializable { // Fields private Integer phonid; private Dept dept; private String phonecode; } <class name="org.wllt....
import java.io.Serializable; import java.util.Date; import lombok.Data; import org.hibernate.annotations.GenericGenerator; $blankline $blankline /** * 容量电价信息表 * @Column参数: 1. name: 指定...
java.io.NotSerializableException: com.baizhi.entity.User 在mybatis中使用二级缓存时候就必须需要将实体类序列化implements Serializable,我的mapper文件使用了标签,使用了mybatis提供的二级缓存,所以在我的...
其中包括以下接口和类: java.io.Serializable java.io.Externalizable ObjectOutput ObjectInput ObjectOutputStream ObjectInputStream Java高级程序设计实战教程第五章-Java序列化机制全文共15页,当前为第7页。...