• 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;
}

}