Serialization GWT是否有效地序列化java.lang.Longs?

Serialization GWT是否有效地序列化java.lang.Longs?,serialization,gwt,performance,network-efficiency,Serialization,Gwt,Performance,Network Efficiency,我通过GWT RPC机制在客户端和服务器之间来回发送对象ID。ID以长(8字节)的形式从数据存储中出来。我想我所有的ID只需要4个字节,但可能会发生一些随机的事情,给我一个5字节(或任何)的值 GWT是否会聪明地将这些值打包到某种可变长度编码中,从而平均节省空间?我可以指定它在什么地方这样做吗?或者我应该编写自己的代码将long复制到int,并注意那些异常情况吗 谢谢~GWT使用gzip压缩处理负载为256字节或更大的响应。如果您的响应中有大量的零字节,那么这应该可以很好地工作 发件人: 确定是

我通过GWT RPC机制在客户端和服务器之间来回发送对象ID。ID以长(8字节)的形式从数据存储中出来。我想我所有的ID只需要4个字节,但可能会发生一些随机的事情,给我一个5字节(或任何)的值

GWT是否会聪明地将这些值打包到某种可变长度编码中,从而平均节省空间?我可以指定它在什么地方这样做吗?或者我应该编写自己的代码将long复制到int,并注意那些异常情况吗


谢谢~

GWT使用gzip压缩处理负载为256字节或更大的响应。如果您的响应中有大量的零字节,那么这应该可以很好地工作

发件人:

确定是否对 给定的servlet请求应该或应该 不是GZIP压缩的。这种方法是可行的 仅在以下情况下调用: 请求者接受GZIP编码

此实现当前返回 如果响应字符串为 估计字节长度大于 256字节。子类可以重写 这是一种逻辑

因此,服务器首先检查请求者(通常是浏览器)是否接受GZIP编码。在内部使用,请参阅。在客户端,浏览器的任务是-因为这是在本机代码中完成的,所以应该相当快。

如中所述

long:JavaScript没有64位整数类型,因此long需要特别考虑。在GWT1.5之前,long类型被简单地映射到64位JavaScript浮点值的整数范围,使long变量的实际范围小于完整的64位。从GWT1.5开始,长原语被模拟为一对32位整数,并在整个64位范围内可靠工作。模拟溢出以匹配预期行为。这里有几个警告。由于底层仿真,大量使用长操作将对性能产生影响。此外,长原语不能在JSNI代码中使用,因为它们不是本机JavaScript数字类型


如果您的ID可以容纳一个整数,那么您的情况会更好。否则,如果您使用的是DTO,请将ID设置为double,这实际上存在于Javascript中。

您确定吗?你能提供一个到文档的链接吗,或者在其他地方提到的链接吗?gzip有效负载通常是HTTP服务器的工作,而不是它所服务的应用程序的工作。我不确定它是否在任何地方都有文档记录,但源代码不存在。RemoteServiceServlet的内部工作非常容易理解,因为grand tour从processPost开始读取,但是这里的相关部分是WriterResponse(以及RPCServletUtils.WriterResponse)。这一切都是以符合HTTP的方式完成的,设置了内容编码头,因此解压由浏览器自动处理。@hambend:这很有趣,因为JS在进行编码/压缩等操作时非常慢(取决于浏览器)。我想,在处理大型请求(比如100kB)时,这可能是一个问题。我还没有尝试客户端Gzip,但我用RC4加密做了一些实验,IE很快就会发出慢速脚本警告。有没有关闭gzipping的选项?@hambend我也没听说过,你有参考链接吗?很高兴找到hambend!我已经检查了消息来源,事实上,这就是正在发生的事情——我用相关信息更新了你的答案,请随意梳理:)(信息太多,无法发表评论,而另一个答案是毫无意义的)。