我有多个对象存储在一个文件中。这是关于ObjectInputStream的。如果我有以下代码:
FileInputStream fis = new FileInputStream(filename);
ObjectInputStream ois = new ObjectInputStream(fis);
Object obj1 = (Object)ois.readObject();
ois.close();
ois = new ObjectInputStream(fis);
Object obj2 = (Object)ois.readObject();
我的问题是:从第二个对象流(obj2)调用的readObject是文件中的第一个还是第二个对象
答案 0 :(得分:3)
它实际上会引发异常。在ObjectInputStream上调用close也将关闭FileInputStream。
答案 1 :(得分:0)
这取决于您存储对象的方式。如果您使用了一个ObjectOutputStream,那么最好还使用一个ObjectInputStream。
如果您使用单独的流进行输出,则还应该为输入使用单独的流。但这并不是真的值得推荐的。
对于你的“持久队列”,我建议这样:
在发送方:
byte[]
,并将其与表示队列流长度的标题一起编写。在接收方:
byte[]
。存储部分队列时,请务必始终存储整条消息(即标题与对象一起)。
当然,使用现有的解决方案可能更容易,例如JMS(您将在其中创建ObjectMessage,并将其提交到队列中)。