簡體   English   中英

RMI:遠程對象的字段是否已序列化並發送到客戶端?

[英]RMI: are fields of remote object serialized and sent to client?

我有以下代碼:

public class Foo implements SomeRemote {
  private String verySecretString;
  public void doSomething(){...}
}

據我了解,foo將以某種方式被序列化並從RMI服務器發送到RMI客戶端。 因此,客戶端仍然可以訪問verySecretString嗎?

這不是它的工作原理,應該公開一個Remote接口而不是一個類,然后在客戶端級別操作該接口,這樣客戶端就不知道實現細節。

因此,在這里您應該擁有類似的東西:

public interface MyService extends Remote {
    void doSomething() throws RemoteException;
}

這只是您在客戶端級別上了解的內容。 在服務器級別,您將實現Foo ,類似於:

public class Foo implements MyService {
    private String verySecretString;
    public void doSomething(){...}
}

回應更新:

如果您不想序列化字段值,則只需在其聲明中添加關鍵字transient ,如下所示:

private transient String verySecretString;

據我了解,foo將以某種方式被序列化並從RMI服務器發送到RMI客戶端。

否。如果Foo是導出的遠程對象,則不會將其發送到任何地方。 它的存根將被發送。

那么,客戶端仍然可以訪問verySecretString嗎?

沒有。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM