創建屬於自己的SerializableCookie
類,其中implements Serializable
只是在建造期間複製Cookie
屬性。類似這樣的:
public class SerializableCookie implements Serializable {
private String name;
private String path;
private String domain;
// ...
public SerializableCookie(Cookie cookie) {
this.name = cookie.getName();
this.path = cookie.getPath();
this.domain = cookie.getDomain();
// ...
}
public String getName() {
return name;
}
// ...
}
確保所有屬性本身也是可序列化的。除了基元以外,String
類本身已經是implements Serializable
,所以您不必擔心這一點。
另外,您也可以包裝/裝飾Cookie
爲transient
性質(所以它不會序列化)並覆蓋writeObject()
和readObject()
方法accordingly。例如:
public class SerializableCookie implements Serializable {
private transient Cookie cookie;
public SerializableCookie(Cookie cookie) {
this.cookie = cookie;
}
public Cookie getCookie() {
return cookie;
}
private void writeObject(ObjectOutputStream oos) throws IOException {
oos.defaultWriteObject();
oos.writeObject(cookie.getName());
oos.writeObject(cookie.getPath());
oos.writeObject(cookie.getDomain());
// ...
}
private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
ois.defaultReadObject();
cookie = new Cookie();
cookie.setName((String) ois.readObject());
cookie.setPath((String) ois.readObject());
cookie.setDomain((String) ois.readObject());
// ...
}
}
最後在List
中使用該類。
謝謝,我認爲這可能有效,但我希望有更簡單的方法來實現我的目標。我希望在SDK中會有一些現成的功能,所以我不必再次發明輪子,但是自從Java開始,我可能不得不這樣做。使用永久性Cookie是我認爲的典型問題。對不起,我的問題首先不太清楚,但我已經更新了它。無論如何,林謝謝你的建議。 – 2010-05-18 17:25:12
不要序列化真正的cookie是有意義的,因爲它們表示的是在您反序列化它時可能無效的狀態。只需將它們保存在內存中,或者只將名稱/值對存儲在「Map」中,然後對其進行序列化。 – BalusC 2010-05-18 17:28:46
非常感謝您的回答! – 2010-05-24 09:00:46