Java反序列化和数组列表异常



我有一个问题,当我试图反序列化一个数组列表,. readobject()方法返回一个布尔值而不是一个对象,我不知道为什么会发生这种情况。谢谢你,很抱歉我的英语不好。

要序列化的类

import java.io.Serializable;
public class Pessoa implements Serializable {
public String nome;
public String sobrenome;
public int idade;
public Pessoa(String n, String sn, int i){
    this.nome = n;
    this.sobrenome = sn;
    this.idade = i;
}
}

序列化和反序列化

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
public class TESTES {
public static void main(String[] args) {
    Pessoa p1 = new Pessoa("Tony", "Stark", 35);
    ArrayList<Pessoa> listaPessoas = new ArrayList<>();
    try {
        FileOutputStream fos = new FileOutputStream("obj.ser");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(listaPessoas.add(p1));
        oos.flush();
        oos.close();
    } catch (FileNotFoundException ex) {
        Logger.getLogger(TESTES.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(TESTES.class.getName()).log(Level.SEVERE, null, ex);
    }

    try {
        FileInputStream fis = new FileInputStream("obj.ser");
        ObjectInputStream ois = new ObjectInputStream(fis);
        //===== HERES THE PROBLEM =========================
        listaPessoas = (ArrayList<Pessoa>) ois.readObject();
        //===== HERES THE PROBLEM =========================
        ois.close();
        System.out.println(listaPessoas.get(0).nome);
    } catch (FileNotFoundException ex) {
        Logger.getLogger(TESTES.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException | ClassNotFoundException ex) {
        Logger.getLogger(TESTES.class.getName()).log(Level.SEVERE, null, ex);
    }
}
}

Exception in thread "main" java.lang.ClassCastException: java.lang.Boolean cannot be          cast to java.util.ArrayList
at testes.TESTES.main(TESTES.java:41)
Java Result: 1

您的问题在这一行:

oos.writeObject(listaPessoas.add(p1));

Java Collections API不流畅。add方法不返回List,而是返回一个指示操作是否成功的boolean。所以你应该像这样把上面的行分成两行:

listaPessoas.add(p1);
oos.writeObject(listaPessoas);

您的问题在序列化:

oos.writeObject(listaPessoas.add(p1));

写入List.add()的返回值,该值是一个布尔值(如果操作改变了集合,则为true),然后将其装箱到Boolean中。

当你反序列化时:

 listaPessoas = (ArrayList<Pessoa>) ois.readObject();

在流中找到一个布尔值,但您试图将其强制转换为List,从而生成类强制转换异常。

只需在单个语句中保持列表的序列化,如:

 listaPessoas.add(value);
 [...] // other operation on the list
 oos.writeObject(listaPessoas);

ArrayList写入ObjectOutputStream,而不是add方法的返回值

 listaPessoas.add(p1)
 oos.writeObject(listaPessoas);

您正在序列化布尔变量oos.writeObject (listaPessoas.add (p1));——add()返回值为布尔值

你应该这样做。listaPessoas.add (p1);oos.writeObject (arraylistobject);

最新更新