hashmap中string到服务器端成了byte[]????

squall 2009-02-23
客户端phprpc for javascript
服务端phprpc for java

客户端定义了function java_util_HashMap() {}

当java_util_HashMap包含字符串时,到了服务器端居然成了byte[],还要手工new String(byte[]),这也太麻烦了吧
squall 2009-02-24
我大概知道什么原因了,phprpc for java应该是根据服务器端类型来反序列化的,java的范型信息在运行时是取不到的,所以统一按byte[]处理。

我改了phprpc的代码解决了,PHPSerializer类的unserialize方法
      case __s:
        obj = getString(readString(stream));
        objectContainer.add(obj);
        return obj;
      case __S:
        obj = getString(readEscapedString(stream));
        objectContainer.add(obj);
        return obj;
不知这样改对现有的功能有什么影响???
不明白的是明明知道是s了,为何还要按byte[]来处理???
andot 2009-02-24
__s 和 __S 都是无字符集编码的二进制字符串,所以如果直接用 getString 变成 Java 中的字符串的话,就很可能出错。另外,以 byte[] 格式来传,速度也会更快。

另外,因为提供了接口来声明方法,所以可以指定确切的类型,不过对于 Java 中的 HashMap 无能为力,因为无法获取它的元素类型(即便是泛型 HashMap 也没有办法,而在 .NET 中则可以通过声明泛型字典来实现自动转换)。

另外,HashMap 在 PHPRPC 中是个通用容器(其它的所有容器类型也都这样),所以在 JavaScript 中不需要自己定义 function java_util_HashMap() {} ,他会自动跟 JavaScript 中的 Array/Object 匹配的。
andot 2009-02-24
所以,对于复杂数据,使用自定义类型,比用HashMap要方便。
Global site tag (gtag.js) - Google Analytics