-
ObjectInputStream(字节流) 和ObjectOutputStream(字节流)
-
除了保存基本数据类型,还包括自定义的对象,自定义的对象读取后类型是Object,使用需要强制转换
-
序列化:输出流,
-
反序列化:输入流
-
和数据流一致,必须先写出后读取,读取和写出顺序保持一致
-
序列化的对象必须实现java.io.Serializable接口
-
transient:该数据不需要序列化,数据透明(输出显示null),private transient String name;
//写出后读取,读取的数徐与写出保持一致
public class n { public static void main(String[]args) throws IOException, ClassNotFoundException {
写入字节数组 //写出 序列化 ByteArrayOutputStream os=new ByteArrayOutputStream(); ObjectOutputStream oos=new ObjectOutputStream(new BufferedOutputStream(os)); ha ff=new ha("hh",222);
oos.writeUTF("哈哈"); oos.writeChar('q'); oos.writeBoolean(false); oos.writeObject(ff); oos.flush(); byte[] datas=os.toByteArray(); oos.close(); //读取 反序列化 ObjectInputStream ois =new ObjectInputStream(new BufferedInputStream(new ByteArrayInputStream(datas))); String s=ois.readUTF(); char ch=ois.readChar(); boolean flag=ois.readBoolean(); Object str=ois.readObject(); //Object需要强制转换 //还原(判断是哪个类,然后强制转换): if (str instanceof String ) //是String类就直接转换成字符串 { String s1=(String)str; System.out.println(s1); } if(str instanceof Data) { Date d=(Date)str; System.out.println(d); } if(str instanceof ha) { ha fr=(ha)str; System.out.println(fr.getName()+fr.getSalary()); } ois.close(); } //javabean,用于封装数据 class ha implements java.io.Serializable { private transient String name; //该数据不需要序列化,数据透明 private double salary; public ha() { } public ha(String name,double salary) { this.name=name; this.salary=salary; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } }
写入文件:
ObjectOutputStream oos=new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("D:/d/s")));
ha ff=new ha("hh",222);
oos.writeUTF("what");
oos.writeObject(ff);
oos.flush();
oos.close();
//使用时,反序列化对象
ObjectInputStream ois=new ObjectInputStream(new BufferedInputStream(new FileInputStream("D:/d/s")));
String s=ois.readUTF();
Object it=ois.readObject();
if(it instanceof ha)
{
ha q=(ha)it;
System.out.println(q.getName()+q.getSalary());
}
ois.close();
//javabean 用于封装数据
class ha implements java.io.Serializable {
private transient String name; //该数据不需要序列化,数据透明
private double salary;
public ha()
{
}
public ha(String name,double salary)
{
this.name=name;
this.salary=salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}