Java实验课6——串行化对象输出
为了将Java对象输出存储到外存中,Java提供对象输出流。
例7.14
实现用户的复制,但要对用户姓名进行隐私保护。
设计步骤:
①定义User类。
类:User
字段:userID:int
userName:transient String
方法:User(int,String)
toString()
②定义SerialandDeserial类。
类:SerialandDeserial
字段:ferry:File
方法:SerialandDeserial(String)
void execSerialize(User us) 串行化
User execDeserialize() 反串行化
③在main()中创建user对象作为源对象,变量us2接收目标;输出us,用于与目标us2对比;定义SerialandDeserial对象ferryBoat,用于复制;调用ferryBoat.execSerialand(User)和ferryBoat.execDeserial()进行对象复制;输出us2进行对比。
代码如下:
import java.io.*;
public class Jpro1_1{
static class User implements Serializable{
private int userID;
private transient String userName;
public User(int id,String name){
userID=id;
userName=name; //串行时不会传送具体的值
}
public String tostring(){
return userID+":"+userName;
}
}
static class SerialandDeserial{
//串行化的目标文件、反串行化的源文件。
File ferry=null;
public SerialandDeserial(String str){
ferry=new File(str);
}
public void execSerialize(User us)throws IOException{
//串行化
FileOutputStream fout=new FileOutputStream(ferry);
ObjectOutputStream ob=new ObjectOutputStream(fout);
ob.writeObject(us);
ob.close();
}
public User execDeserialize() throws IOException,
ClassNotFoundException{
//反串行化
FileInputStream fis=new FileInputStream(ferry);
ObjectInputStream oi=new ObjectInputStream(fis);
User us=(User)oi.readObject();
oi.close();
return us;
}
}
public static void main(String[] args)throws IOException, ClassNotFoundException{
User us=new User(17, "ljx");
User us2;
System.out.println("转换之前:"+us);
SerialandDeserial ferryBoat=new SerialandDeserial("data.dat");
//经查询,data.dat是电脑中应用程序数据的意思
ferryBoat.execSerialize(us);
us2=ferryBoat.execDeserialize();
System.out.println("转换之后:"+us2);
}
}