Java Android哈希表序列化
我对哈希表的序列化有一个奇怪的问题。我已经做了一个服务器,客户端应用程序。其中,服务器(PC/MAC)正在序列化哈希表,并通过UDP将其发送给客户端(Android)。数据发送/读取正确,但我在LogCat上收到了下面的一堆消息 04-12 11:19:43.059:DEBUG/dalvikvm(407):GetFieldID:找不到字段Ljava/util/Hashtable;。载荷系数:F 偶尔,我会看到这些 04-12 11:21:19.150:DEBUG/dalvikvm(407):GC在97毫秒内释放了10814个对象/447184字节 该应用程序将运行2-3分钟,然后崩溃。有趣的是,我没有在SDK 1.5上看到Loadfactor错误。但我确实看到了无GC的xxxx对象,它们常常是安静的 调试后,我发现问题在于反序列化,错误/警告来自以下代码 代码: 在 代码: 在客户机上。我的服务器正在序列化代码如下 代码: 知道发生了什么吗Java Android哈希表序列化,java,android,serialization,hashtable,Java,Android,Serialization,Hashtable,我对哈希表的序列化有一个奇怪的问题。我已经做了一个服务器,客户端应用程序。其中,服务器(PC/MAC)正在序列化哈希表,并通过UDP将其发送给客户端(Android)。数据发送/读取正确,但我在LogCat上收到了下面的一堆消息 04-12 11:19:43.059:DEBUG/dalvikvm(407):GetFieldID:找不到字段Ljava/util/Hashtable;。载荷系数:F 偶尔,我会看到这些 04-12 11:21:19.150:DEBUG/dalvikvm(407):GC
谢谢你的帮助 不要在体系结构之间使用序列化。无法保证序列化的Dalvik VM对象树的格式与JavaSE/JavaEE环境兼容。请使用XML、JSON、协议缓冲区、Thrift等在体系结构之间传输结构化数据。为时已晚,但对于遇到此问题的任何其他人: 注意上面Commonware所说的(不要说你没有收到警告): 我通过使用 以及使用长对象贴图。 我意识到,如果dalvik或Java更改了序列化,我会感到满足,但是序列化比其他方法容易得多,而且错误消息(虽然是良性的)确实意味着大量不必要的分配和开销。 在此基础上,我使用proguard将库减少到我所需的45K(共1米)。 我还建议您保留一份trove源代码的副本,以防它们更改序列化,同时还要注意,我需要3.0.0 rc1才能使其工作(不确定serialid在版本之间是否一定匹配)
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bis);
object = ois.readObject();
object = ois.readObject();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);