Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android哈希表序列化_Java_Android_Serialization_Hashtable - Fatal编程技术网

Java Android哈希表序列化

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

我对哈希表的序列化有一个奇怪的问题。我已经做了一个服务器,客户端应用程序。其中,服务器(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对象,它们常常是安静的

调试后,我发现问题在于反序列化,错误/警告来自以下代码

代码:

在 代码:

在客户机上。我的服务器正在序列化代码如下

代码:

知道发生了什么吗


谢谢你的帮助

不要在体系结构之间使用序列化。无法保证序列化的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);