java中对象反序列化怎空文件,在Java中反序列化文件中的对象

I have a file which contains multiple serialized objects of class XYZ. While serializing, the each XYZ object was appended to the file.

Now I need to read each object from the file, and I am able to read only the first object.

Any idea how I can read each object from the file and eventually store it into a List?

解决方案

Try the following:

List results = new ArrayList();

FileInputStream fis = new FileInputStream("cool_file.tmp");

ObjectInputStream ois = new ObjectInputStream(fis);

try {

while (true) {

results.add(ois.readObject());

}

} catch (OptionalDataException e) {

if (!e.eof)

throw e;

} finally {

ois.close();

}

Following up on Tom's brilliant comment, the solution for multiple ObjectOutputStreams would be,

public static final String FILENAME = "cool_file.tmp";

public static void main(String[] args) throws IOException, ClassNotFoundException {

String test = "This will work if the objects were written with a single ObjectOutputStream. " +

"If several ObjectOutputStreams were used to write to the same file in succession, " +

"it will not. – Tom Anderson 4 mins ago";

FileOutputStream fos = null;

try {

fos = new FileOutputStream(FILENAME);

for (String s : test.split("\\s+")) {

ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(s);

}

} finally {

if (fos != null)

fos.close();

}

List results = new ArrayList();

FileInputStream fis = null;

try {

fis = new FileInputStream(FILENAME);

while (true) {

ObjectInputStream ois = new ObjectInputStream(fis);

results.add(ois.readObject());

}

} catch (EOFException ignored) {

// as expected

} finally {

if (fis != null)

fis.close();

}

System.out.println("results = " + results);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值