3

有没有一种简单的方法可以在不编写自己的生成器的情况下将 SerializationStreamWriter 用于自定义目的?

(例如 html5 存储)

GWT 的 javadoc 说明的很少。

4

2 回答 2

3

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

所以,对我来说,可以在客户端使用SerializationStreamWriter进行序列化,并使用 SerializationStreamReader 进行反序列化。

要实现这一点

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

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

在 GWT 中,您有 ClientSerializationStreamWriter、ClientSerializationStreamReader 用于客户端序列化/反序列化;ServerSerializationStreamWriter, ServerSerializationStreamReader 用于服务器端序列化/反序列化;

Client SerializationStream Writer将对象序列化为FORMAT_1,只有Server SerializationStream Reader可以读取它(将其反序列化为对象)。

Server SerializationStream Writer会将对象序列化为FORMAT_2,只有Client SerializationStream Reader可以读取(反序列化为对象)。

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

于 2012-08-31T09:41:51.823 回答
0

不。

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

于 2012-05-13T21:01:35.727 回答