gpt4 book ai didi

java - 在不使用 while(true) 的情况下从文件中反序列化多个对象

转载 作者:行者123 更新时间:2023-11-30 09:04:07 25 4
gpt4 key购买 nike

我有一段代码,它从文件中反序列化多个对象。我怎样才能避免使用 while(true)?

ObjectInputStream in = new ObjectInputStream(new FileInputStream(
filename));

while (true) {
try {
MyObject o = (MyObject) in.readObject();
// Do something with the object
} catch (EOFException e) {
break;
}
}

in.close();

最佳答案

你应该写一个集合(有大小),或者在每个对象前放一个标记:

try {
for (;in.readBoolean();) {
MyObject o = (MyObject) in.readObject();

}
} catch (EOFException e) {
// ...
}

当你写你的对象时,就在前面写一个 boolean 值(但是如果我记得那部分它会占用 1 个字节):

for (MyObject o : iterable) {
out.writeBoolean(true);
out.writeObject(o);
}
out.writeBoolean(false);

如果iterable是一个集合或者映射,你可以使用默认的序列化:

out.writeObject(iterable); // default collection serialization

此外,不要为每个项目捕获异常,全局捕获它(尤其是 EOFException!):出于性能原因,它更好。

我不知道你是否使用 Java 7,但你的代码 + 我的 for 循环可以这样写:

try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(     filename))) {
for (;in.readBoolean();) {
MyObject o = (MyObject) in.readObject();

}
} catch (EOFException e) {
// ...
}
// no need to close, the try-with-resources do the job for you.

关于java - 在不使用 while(true) 的情况下从文件中反序列化多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25361420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com