我目前正在编写一个解析器来解释GWT RPC的响应。
但是,我很难弄清楚GWT用于编码java.lang.Long值的编码(即不是原始长度 - 这将是Base64)
以下是一个示例RPC负载,用于通过它的ID检索组对象(通过.retrieve(java.lang.Long id)):
7|0|5|http://10.0.1.35:8005/platform/gwt/com.application.gwt.Contacts/|57C71F0104C208A16262D2898A6133DD|com.application.gwt.client.rpc.GroupService|retrieve|java.lang.Long/4227064769|1|2|3|4|1|5|5|PFu|
我设法弄清楚值“PFu”(最后)是检索方法中使用的组编码ID。
实际组的ID是“61806”。
所以我的问题是,“61806”如何成为“PFu”?这里使用什么编码?它似乎不是Base 64。
其他情况包括:
iW = 2198 D4O = 15886
答案 0 :(得分:3)
事实上,根据您的示例,它是完全有效的Base64。
然而,似乎最后两位数(值62,63)分别使用'$'和'_',而不是更常见的'+'和'/'。
下划线使URL安全并在某些实现中使用,但美元符号必须是他们自己的发明。
如果您通过转换器运行示例,如果值是ascii编码(可能是它们),则可能会得到错误的结果。
答案 1 :(得分:0)
您可以使用GWT com.google.gwt.user.server.Base64Utils类来获取编码/解码值。
e.g。
String val = Base64Utils.toBase64(727854);
long l = Base64Utils.longFromBase64("WIe7dms");