溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java _io_對象流,能夠保存基本數(shù)據(jù)類型和對象

發(fā)布時間:2020-07-03 16:33:29 來源:網(wǎng)絡(luò) 閱讀:263 作者:wx5d21d5e6e5ab1 欄目:編程語言
  • ObjectInputStream(字節(jié)流) 和ObjectOutputStream(字節(jié)流)
  • 除了保存基本數(shù)據(jù)類型,還包括自定義的對象,自定義的對象讀取后類型是Object,使用需要強(qiáng)制轉(zhuǎn)換
  • 序列化:輸出流,
  • 反序列化:輸入流
  • 和數(shù)據(jù)流一致,必須先寫出后讀取,讀取和寫出順序保持一致
  • 序列化的對象必須實(shí)現(xiàn)java.io.Serializable接口
  • transient:該數(shù)據(jù)不需要序列化,數(shù)據(jù)透明(輸出顯示null),private transient String name;

    //寫出后讀取,讀取的數(shù)徐與寫出保持一致

    public class n {
    
    public static void main(String[]args) throws IOException, ClassNotFoundException
    {

    寫入字節(jié)數(shù)組
    //寫出 序列化
    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需要強(qiáng)制轉(zhuǎn)換
    
    //還原(判斷是哪個類,然后強(qiáng)制轉(zhuǎn)換):
    if (str instanceof String ) //是String類就直接轉(zhuǎn)換成字符串
    {
        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,用于封裝數(shù)據(jù)   
    class ha implements java.io.Serializable  {
    
    private transient String name;  //該數(shù)據(jù)不需要序列化,數(shù)據(jù)透明
    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 用于封裝數(shù)據(jù)
class ha implements java.io.Serializable  {

private transient String name;  //該數(shù)據(jù)不需要序列化,數(shù)據(jù)透明
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;
}

}
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI