为什么我的集合中只有某些对象是用writeObject()编写的?

时间:2016-11-24 01:10:03

标签: java objectoutputstream

我创建了两个应用程序,一个是" 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方法调用的基本规则。如果所有对象都是在本地创建的,为什么它们都没有被写入?此外,他们为什么会从收藏品中消失?

0 个答案:

没有答案