![](/img/trans.png)
[英]How to read a List of List of Objects from a file using ObjectInputStream in Java?
[英]How to read multiple objects in java using ObjectInputStream?
import java.util.*;
import java.io.*;
class Person implements Serializable
{
String name;
int age;
}
public class Main
{
public static void main(String[] args) throws Exception
{
Scanner sc = new Scanner(System.in);
FileOutputStream fos = new FileOutputStream("Hello.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
System.out.println("Enter number of data:");
int n = sc.nextInt();
sc.nextLine();
Person voter = new Person();
for(int i=0;i<n;i++)
{
System.out.println("Enter name:");
voter.name = sc.nextLine();
System.out.println("Enter age:");
voter.age = sc.nextInt();
sc.nextLine();
oos.writeObject(voter);
}
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Hello.txt"));
Person buffer = null;
while((buffer = (Person)ois.readObject())!=null)
{
if(buffer instanceof Person)
{
if(buffer.age<18)
{
System.out.println(buffer.name+" is unable to vote.");
}
else
{
System.out.println(buffer.name+" is able to vote.");
}
}
}
}
}
我正在尝试在 txt 文件中写入和读取多个对象,写入部分有效,但读取部分无效。 每个循环只读取第一个 object,如何读取下一个 object?
我收到此错误:
Exception in thread "main" java.io.EOFException
at java.base/java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:3062)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1561)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:430)
at Main.main(Main.java:31)
我认为您将 BufferedReader 功能与 ObjectInputStream 功能混淆了。
回报:
包含行内容的字符串,不包括任何行终止字符,或者 null 如果在没有读取任何字符的情况下到达 stream 的末尾
但是,ObjectInputStream并非如此。 当到达 stream 的末尾时,它不会返回 null。 事实上,没有内置方法可以知道您何时处于 stream 的末尾; 你将不得不采取措施来表示结束。
由于您正在检查 null,因此最简单的方法是在关闭 ObjectOutputStream 之前自己编写null
值:
oos.writeObject(null);
oos.close();
旁注:请注意,一次又一次地编写相同的 Person object 可能不会达到您的预期。 ObjectOutputStream 跟踪先前已写入 stream 的对象,因此不会重复它们。 您可以通过两种方式解决此问题:
Person voter = new Person();
在你的 for 循环体内,因此每次都会写入一个新的 Person object。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.