Java Xstream对象序列化

Java Xstream对象序列化,java,xml,Java,Xml,对于这样一个类: public class Person { private String firstname; private String lastname; private PhoneNumber phone; private PhoneNumber fax; // ... constructors and methods private void calculate() { } } XStream xstream = new XStream(new Do

对于这样一个类:

public class Person {
  private String firstname;
  private String lastname;
  private PhoneNumber phone;
  private PhoneNumber fax;
  // ... constructors and methods
  private void calculate()
  {
  }
}
XStream xstream = new XStream(new DomDriver()); 

Person joe = new Person("Joe", "Walnes");
joe.setPhone(new PhoneNumber(123, "1234-456"));
joe.setFax(new PhoneNumber(123, "9999-999"));

String xml = xstream.toXML(joe);
<person>
  <firstname>Joe</firstname>
  <lastname>Walnes</lastname>
  <phone>
    <code>123</code>
    <number>1234-456</number>
  </phone>
  <fax>
    <code>123</code>
    <number>9999-999</number>
  </fax>
</person>
Person newJoe = (Person)xstream.fromXML(xml);
像这样的物体:

public class Person {
  private String firstname;
  private String lastname;
  private PhoneNumber phone;
  private PhoneNumber fax;
  // ... constructors and methods
  private void calculate()
  {
  }
}
XStream xstream = new XStream(new DomDriver()); 

Person joe = new Person("Joe", "Walnes");
joe.setPhone(new PhoneNumber(123, "1234-456"));
joe.setFax(new PhoneNumber(123, "9999-999"));

String xml = xstream.toXML(joe);
<person>
  <firstname>Joe</firstname>
  <lastname>Walnes</lastname>
  <phone>
    <code>123</code>
    <number>1234-456</number>
  </phone>
  <fax>
    <code>123</code>
    <number>9999-999</number>
  </fax>
</person>
Person newJoe = (Person)xstream.fromXML(xml);
生成的XML如下所示:

public class Person {
  private String firstname;
  private String lastname;
  private PhoneNumber phone;
  private PhoneNumber fax;
  // ... constructors and methods
  private void calculate()
  {
  }
}
XStream xstream = new XStream(new DomDriver()); 

Person joe = new Person("Joe", "Walnes");
joe.setPhone(new PhoneNumber(123, "1234-456"));
joe.setFax(new PhoneNumber(123, "9999-999"));

String xml = xstream.toXML(joe);
<person>
  <firstname>Joe</firstname>
  <lastname>Walnes</lastname>
  <phone>
    <code>123</code>
    <number>1234-456</number>
  </phone>
  <fax>
    <code>123</code>
    <number>9999-999</number>
  </fax>
</person>
Person newJoe = (Person)xstream.fromXML(xml);
从XML反序列化对象如下所示:

public class Person {
  private String firstname;
  private String lastname;
  private PhoneNumber phone;
  private PhoneNumber fax;
  // ... constructors and methods
  private void calculate()
  {
  }
}
XStream xstream = new XStream(new DomDriver()); 

Person joe = new Person("Joe", "Walnes");
joe.setPhone(new PhoneNumber(123, "1234-456"));
joe.setFax(new PhoneNumber(123, "9999-999"));

String xml = xstream.toXML(joe);
<person>
  <firstname>Joe</firstname>
  <lastname>Walnes</lastname>
  <phone>
    <code>123</code>
    <number>1234-456</number>
  </phone>
  <fax>
    <code>123</code>
    <number>9999-999</number>
  </fax>
</person>
Person newJoe = (Person)xstream.fromXML(xml);
在对此人进行反序列化之后,是否可以执行newJoe.calculate()方法


person类中数字的值是否可以更改为另一个值,如newJoe.number=4545

是的,您可以调用方法并更改值。它与任何其他实例一样,不同之处在于它从XML文件获取值,而不是显式地将它们传递给构造函数

该对象将存在于反序列化它的VM中。如果你想在网络上完成这项工作,你需要使用类似RMI的东西在网络上传递对象。

是的


我很荣幸能在这个例子中被引用。

你的问题是什么?在客户端反序列化它之后,使用这个反序列化对象(比如我们的例子中的newJoe)我们能执行Person类(位于服务器中)中的newJoe.calculate()方法吗?非常感谢…will newJoe.calculate()在客户端JVM或服务器端JVM中执行?如果在客户端上反序列化XML,那么它将在客户端中执行。如果在服务器上反序列化XML,那么它将在服务器上执行。