2013-11-02 44 views
0

我需要在Java序列化一些澄清。如果我正在序列化一個對象,並且我想通過RMI返回該對象,那麼我只是在我的對象的自定義類上實現可序列化?我已經看到objectoutputstream和objectinputstream,但我不知道是否需要使用這些,因爲我不太瞭解它們的用法。我的第二個問題是我將如何去做一個數組列表序列化?我的第三個問題可能與我的第一個問題有關,但是如何在返回之前對對象進行編組?序列化過程中的對象編組?RMI序列化/元帥

讓調用問句類:

public class Sentence implements Serializable { 

} 

然後,我將創建一個類的實例和一些其他類返回該對象

+0

只需用'Serializable'編組和解組就可以對JVM(低)級事物進行簽名。 – 2013-11-02 10:58:32

回答

2
  1. 是的:實現Serializable使得你的對象可序列化,除非它引用了一個不可序列化的對象。對象流由RMI在內部用於發送和接收對象。如果使用RMI,則不需要使用它們。如果你想使用套接字發送一個對象,或者將它保存到一個文件中,那麼你可以使用它們。

  2. ArrayList的是序列化的。看看它的javadoc。你不必做任何事情。

  3. 您只需從你的RMI方法返回的對象,RMI將序列化它。序列化和編組是兩個詞,基本上意味着同樣的事情。以同樣的方式,如果RMI方法需要一個參數,RMI將序列作爲參數傳遞的對象,將其發送到RMI服務器,這將反序列化,然後調用您的實際方法。這一切都是由RMI完成的。

+0

這一切都是由RMI爲你完成的。你得到一個遠程對象的引用,你怎麼稱呼它,就好像物體不偏僻,RMI做了序列化參數的任務,並將它們發送到服務器,反序列化他們的服務器上,調用你的方法,序列化的返回值,將其發送回客戶端,並將其返回給調用遠程方法的客戶端。 –

+0

是的,它肯定跳過了你的答案#3,ty! – user2644819

1

Serializable是什麼叫做標記接口;它只是告訴Java你的類有一些能力,而不需要你實現任何特定的方法。在你的類中實現它會告訴JVM,把你的Java對象的字段轉換成打包後的形式以供其他計算機使用是可以的(有意義的)。

這就是你所要做的如果你班上的所有字段都是Serializable。如果您有沒有Serializable持有的網絡連接或天然資源領域,如領域,你需要將它們標記transient(由系列化忽略),當你的類是通過覆蓋readObject採取反序列化設置它們備份的護理和/或writeObject

+0

謝謝你的信息+1 – user2644819