【问题标题】:Deserialize many objects in java? [duplicate]在java中反序列化许多对象? [复制]
【发布时间】:2015-11-25 23:58:43
【问题描述】:

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

}
}

【问题讨论】:

    标签: java serialization file-io deserialization


    【解决方案1】:

    使用 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)

    【讨论】:

    • 谢谢你的回答,但是如何打印元素???
    • 您没有回答完整的问题。我想分别打印所有对象数据......例如,如果我有这样的对象数据(1,“John”,50),那么它应该像我在上面的代码中编写的输出语句一样打印。每个对象数据必须单独打印。
    • 输入流没有hasNext() 方法,您不能在同一底层流上同时使用ScannerObjectInputStream。您还没有尝试过。
    • @EJP 你能帮帮我吗,我想回答我的问题。我花了很长时间才找到答案。
    • @BeginnerProgrammer 您在重复的问题中被给了 several answers
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 2015-06-12
    • 2016-09-23
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多