如何应用SerializationStreamWriter进行存储

时间:2012-05-13 18:53:04

标签: gwt serialization

是否有简单方法在不编写自己的生成器的情况下将SerializationStreamWriter用于自定义目的?

(例如html5存储)

GWT的javadoc很少说明。

2 个答案:

答案 0 :(得分:3)

我们正在为我们当前的项目编写一个实现,它完全符合您的要求:将自定义对象序列化为字符串并将其保存到localstorage中,将字符串反序列化为对象...

因此,对于我来说,使用SerializationStreamWriter进行序列化是 possbile ,并在CLIENT SIDE中使用SerializationStreamReader进行反序列化。

要实现此目的

您不需要SerializationStreamWriter / SerializationStreamReader的生成器,但 TypeSerializer的生成器(实现com.google.gwt.user.client.rpc.impl.SerializerBase)。这很简单,请查看com.google.gwt.user.rebind.rpc.TypeSerializerCreator,并在您的生成器中使用它。或者,如果在一个RPC服务中引用了所有自定义对象,则可以使用生成的rpc服务的TypeSerializer。

您必须编写 SerializationStreamWriter或SerializationStreamReader 的正确实现。因为有两种序列化的字符串格式(请求使用格式和响应使用格式):

IN GWT,你有     ClientSerializationStreamWriter,ClientSerializationStreamReader,用于客户端序列化/反序列化;     ServerSerializationStreamWriter,ServerSerializationStreamReader,用于服务器端序列化/反序列化;

客户端 SerializationStream Writer 会将对象序列化为 FORMAT_1 ,只有服务器 SerializationStream Reader < / strong>可以读取它(将其反序列化为对象)。

服务器 SerializationStream Writer 会将对象序列化为 FORMAT_2 ,只有客户端 SerializationStream Reader < / strong>可以读取它(将其反序列化为对象)。

所以你需要做什么,如果你想使用ClientSerializationStreamWriter序列化你的对象,那么为客户端写一个类似的ServerSerializationStreamReader实现。或者,如果要使用ClientSerializationStreamWriter反序列化字符串,则在客户端编写类似的ServerSerializationStreamWriter实现。这并不困难,因为 FORMAT_1 FORMAT_2 之间的差异只是顺序。

答案 1 :(得分:0)

没有

因为GWT-RPC序列化是非对称的,所以它不能用于本地存储:服务器了解客户端发送的内容,客户端了解服务器发送的内容,但是他们不会理解他们自己写的内容。