readObject怎么读取多个对象
时间: 2023-06-02 08:08:05 浏览: 200
readObject 方法可以读取多个对象,但在读取时必须保证写入时的顺序一致,否则可能会出现读取错误的情况。具体实现可以使用 ObjectOutputStream 中的 writeObject 方法按照顺序将对象写入到字节流中,然后在 ObjectInputStream 中使用 readObject 方法读取对象。在读取时可以使用 instanceof 关键字进行类型判断,以保证读取的对象类型正确。
相关问题
java从文件中将读取多个对象
要从文件中读取多个对象,可以使用Java中的ObjectInputStream类。以下是一个简单的示例代码:
```java
import java.io.*;
public class ReadObjectsFromFile {
public static void main(String[] args) {
try {
FileInputStream fileIn = new FileInputStream("objects.dat");
ObjectInputStream objIn = new ObjectInputStream(fileIn);
while (true) {
Object obj = objIn.readObject();
if (obj == null) {
break;
}
// 对读取的对象进行操作
System.out.println(obj.toString());
}
objIn.close();
fileIn.close();
} catch (EOFException e) {
// 文件读取完毕
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
在这个示例中,我们首先打开一个文件输入流和一个对象输入流,然后使用一个无限循环从文件中读取对象。当读取到文件末尾时,会抛出EOFException异常,这时我们就可以退出循环。在读取每个对象后,可以对它进行必要的操作。最后,我们关闭对象输入流和文件输入流。
需要注意的是,当你将对象写入文件时,需要使用ObjectOutputStream类,将对象序列化后写入文件。在读取对象时,需要使用ObjectInputStream类,将序列化后的对象反序列化为Java对象。并且,被序列化的对象必须实现Serializable接口。
写入多个对象储存后,无法用ArrayList<Student> list = (ArrayList <Student>) ois.readObject();读取
这种情况可能是因为你在写入对象时使用了 ObjectOutputStream 的 writeObject 方法,但是在读取对象时使用了 ObjectInputStream 的 readObject 方法,但是没有按照写入对象的顺序读取。
如果你在写入对象时使用了 writeObject 方法,那么在读取对象时也应该按照写入对象的顺序读取,例如:
```java
// 写入对象
ArrayList<Student> list = new ArrayList<>();
// ...
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("students.txt"));
oos.writeObject(list);
oos.close();
// 读取对象
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("students.txt"));
ArrayList<Student> list = (ArrayList<Student>) ois.readObject();
ois.close();
```
如果你确保按照写入对象的顺序读取,但仍然无法读取所有对象,那么可能是因为某些对象在写入时没有被正确地序列化。你可以检查一下在写入对象时是否有报错或者警告信息。
阅读全文