StringWriter如何采取新的价值?

时间:2014-09-12 20:03:25

标签: jaxb resteasy

有人可以向我解释一下writer.toString如何保存客户数据?似乎元帅(客户,作家)以某种方式修改了作者。请看下面,谢谢:

 Customer customer = new Customer();
 customer.setId(42);
 customer.setName("Bill Burke");
 JAXBContext ctx = JAXBContext.newInstance(Customer.class);
 StringWriter writer = new StringWriter();
 ctx.createMarshaller().marshal(customer, writer);

[见这里:]

 String custString = writer.toString();  // how did writer suddenly take on value?

 customer = (Customer)ctx.createUnmarshaller()
             .unmarshal(new StringReader(custString));

2 个答案:

答案 0 :(得分:2)

StringWriter是写入StringBuffer的Writer实现。当你调用write()时,你追加到StringBuffer。 ToString()在StringBuffer上调用toString()并返回它。

Marshaller.marshal()只是将JAXB对象序列化为XML,并将它们写入Writer(从而进入StringBuffer)。然后,第二个代码片段中的StringReader将从StringBuffer创建的String中读取。

答案 1 :(得分:0)

我猜测编写器能够编写内容的原因是因为编组器必须在写入对象内部调用一个方法来改变写入点。因此,在marshal()之后,编写器引用新数据。

http://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html(见下)