我创建了两个应用程序,一个是" server"和一个客户"。我的目标是将服务器应用程序中存在的Serializable对象写入磁盘,以便以后可以访问它们。但是,当我在服务器上调用writeObject()时,将集合作为输入,只有部分集合被写入文件。我正在使用Java RMI调用服务器上的对象创建。
将 写入文件的对象完全使用服务器应用程序中的代码创建。 不是的对象是由服务器根据客户端的一些输入创建的 - 但是服务器正在完成创建和存储对象的所有工作。
例如,在服务器应用程序中,我有以下方法:
Class Server{
HashMap<Listing> activeListings;
int nextListingID=0;
void createListing(ListingSpec lst)
{
nextListingID+=1;
temp = new Listing(nextListingID, lst);
activeListings.put(nextListingID, temp);
}
writeProcess()
{
File f = new File("/activeListings.ser");
FileOutputStream fout = new FileOutputStream(f);
ObjectOutputStream oos = new ObjectOutputSteram(fout);
oos.writeObject(activeListings);
oos.close();
fout.close();
}
我多次调用createListing
,有时由服务器启动,有时由客户端通过RMI调用。我确保我希望写入磁盘的所有对象都被实例化并存在于服务器的activeListings
集合中。但是,当我调用writeProcess
时,只有在没有 RMI的情况下创建的对象才会被写入activeListings.ser
中的磁盘。事实上 - 当我在activeListings
命令之后检查writeObject
的内容时,这些对象已从集合中消失了!
我是RMI的新手并且一般分发应用程序,所以我觉得我缺少一些关于RMI方法调用的基本规则。如果所有对象都是在本地创建的,为什么它们都没有被写入?此外,他们为什么会从收藏品中消失?