反序列化java中的许多对象?

时间:2015-11-25 23:58:43

标签: java serialization file-io deserialization

我有一个问题。现在我在名为student.bin

的二进制文件中序列化了许多对象

现在在二进制文件中添加对象数据后,我想要检索二进制文件中写入的所有数据。

但它只检索第一个对象数据。

问题是:如何获取文件的所有内容?

这是我的代码:

import java.util.Scanner;
import java.io.*;
import java.io.Serializable;

public class Binary implements Serializable{

public int id;
public String name;
public int grade;

public static void main(String argv[]) throws IOException, ClassNotFoundException
{
    Binary b = new Binary();
    Scanner sc = new Scanner(System.in);
    System.out.printf("Enter student id: ");
    b.id = sc.nextInt();
    System.out.printf("Enter student name: ");
    b.name = sc.next();
    System.out.printf("Enter student grade: ");
    b.grade = sc.nextInt();
    ObjectOutputStream bin = new ObjectOutputStream(new FileOutputStream("C:\\Users\\فاطمة\\Downloads\\student.bin",true));
    bin.writeObject(b);
    bin.close();

    ObjectInputStream in = new ObjectInputStream(new FileInputStream("C:\\Users\\فاطمة\\Downloads\\student.bin"));
    Binary b2 = (Binary)in.readObject();
    System.out.println("Student ID: " + b2.id);
    System.out.println("Student Name: " + b2.name);
    System.out.println("Student Grade: " + b2.grade);
    in.close();

}
}

1 个答案:

答案 0 :(得分:0)

使用while循环。 Streams有一个hasNext方法,只要文件中有未读字节,就可以继续读取对象。请注意,如果文件末尾有额外的字节,则会导致错误。

List<Binary> binaries = new ArrayList<Binary>();
while(in.hasNext()) {
    binaries.add((Binary) in.readObject());
}

如果这是无效的,我道歉,我现在无权测试它。

编辑:hasNext可能是Scanner而不是Stream的方法,在这种情况下,您必须将Stream包装在Scanner对象中:Scanner read = new Scanner(in)