我有一个问题。现在我在名为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();
}
}
答案 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)
。