自己动手写写:Java序列化
从以下几个方面来讨论这个问题
1、序列化是用来干什么的?
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容就行流化。简而言之就是为了保存内存中的各种实例对象的状态,并且可以通过反序列化将实例对象的状态再读出来。
2、为什么需要序列化?
为了将对象转换为更加容易传输的格式,减少网络流量的开销。例如,可以序列化一个实例对象,然后使用Http通过Internet在客户端和服务端之间传输该对象,在另外一段,反序列化将从该流中重新构造对象。
3、什么情况下需要序列化?
内存中的实例对象状态保存到存储介质时。
内存中的实例对象需要在网络传输时。
4、Java中序列化的实现
Java中只需要一个类implements Serializable即可实现此类的实例对象的序列化。
通过ObjectOutputStream的writeObject方法来实现对象的序列化。通过ObjectInputStream的readObject方法类实现对象的反序列化。
请看下面的一个例子
public class Org
{
private String orgId;
private String orgName;
/**
* @return 返回 orgId
*/
public String getOrgId()
{
return orgId;
}
/**
* @param 对orgId进行赋值 */
public void setOrgId(String orgId)
{
this.orgId = orgId;
}
/**
* @return 返回 orgName
*/
public String getOrgName()
{
return orgName;
}
/**
* @param 对orgName进行赋值 */
public void setOrgName(String orgName)
{
this.orgName = orgName;
}
}
public class User implements Serializable
{
/**
* 注释内容
*/
private static final long serialVersionUID = -2069026676796654202L;
public static String s = "ssss";
private String userName;
private String password;
private Org org;
/**
* @return 返回 org
*/
public Org getOrg()
{
return org;
}
/**
* @param 对org进行赋值 */
public void setOrg(Org org)
{
this.org = org;
}
/**
* @return 返回 userName
*/
public String getUserName()
{
return userName;
}
/**
* @param 对userName进行赋值 */
public void setUserName(String userName)
{
this.userName = userName;
}
/**
* @return 返回 password
*/
public String getPassword()
{
return password;
}
/**
* @param 对password进行赋值 */
public void setPassword(String password)
{
this.password = password;
}
}
public class UserImpl extends User
{
/**
* 注释内容
*/
private static final long serialVersionUID = 418270522532375203L;
private String confimPassword;
/**
* @return 返回 confimPassword
*/
public String getConfimPassword()
{
return confimPassword;
}
/**
* @param 对confimPassword进行赋值 */
public void setConfimPassword(String confimPassword)
{
this.confimPassword = confimPassword;
}
}