首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android哈希表序列化

Android哈希表序列化
EN

Stack Overflow用户
提问于 2010-04-14 01:21:26
回答 2查看 2.3K关注 0票数 3

我在序列化Hashtable时遇到了一个奇怪的问题。我已经做了一个服务器,客户端应用程序。其中服务器(PC/MAC)序列化Hashtable并通过UDP将其发送到客户端(Android)。数据的发送/读取是正确的,但我在LogCat上收到了一堆这样的消息。

04-12 11:19:43.059: DEBUG/dalvikvm(407):GetFieldID:找不到字段Ljava/util/Hashtable;.loadFactor:F

偶尔,我会看到这些

04-12 11:21:19.150: DEBUG/dalvikvm(407):GC在97ms内释放了10814个对象/ 447184字节

应用程序会运行2-3分钟,然后崩溃。有趣的是,我在SDK1.5上没有看到Loadfactor错误。但是我确实看到了GC Free xxxx对象,很安静。

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

代码:

代码语言:javascript
复制
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);           
ObjectInputStream ois = new ObjectInputStream(bis);             
object = ois.readObject(); 

at Code:

代码语言:javascript
复制
object = ois.readObject();

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

代码:

代码语言:javascript
复制
ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
ObjectOutputStream oos = new ObjectOutputStream(bos);               
oos.writeObject(obj);       

知道这是怎么回事吗?

谢谢你的帮助!

EN

回答 2

Stack Overflow用户

发布于 2010-04-14 03:53:52

不要在体系结构之间使用序列化。不能保证序列化的Dalvik VM对象树的格式与JavaSE/JavaEE环境兼容。请使用XML、JSON、Protocol Buffers、Thrift等在架构之间传输结构化数据。

票数 1
EN

Stack Overflow用户

发布于 2011-02-16 19:03:47

为时已晚,但对于任何遇到这一点的人来说:

注意上面说的常用件(不要说你没有收到警告):

我通过使用trove libraries和长对象映射解决了这个问题。我意识到,如果dalvik或Java更改了序列化,我就完蛋了,但序列化比其他方法容易得多,而且错误消息(虽然是良性的)确实意味着大量不必要的分配和开销。最重要的是,我使用proguard将库减少到我需要的45K (满分1M)。我还建议您保留一份trove源代码的副本,以防他们更改序列化,还请注意,我需要3.0.0 rc1才能使其工作(不确定不同版本之间的序列号是否一定匹配)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2631686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档