问题标签 [serializable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java 中的可序列化、可克隆和内存使用
我正在使用一个内部类,它是 HashMap 的子类。我有一个String
作为键和double[]
值。我每个存储大约 200 个双打double[]
。我应该使用大约 700 MB 来存储键、指针和双精度。但是,内存分析表明我需要的远不止这些(略超过 2 GB)。
使用TIJmp(分析工具)我看到有一个char[]
几乎使用了总内存的一半。TIJmp 说char[]
来自Serializable
and Cloneable
。其中的值范围从字体列表和默认路径到消息和单个字符。
Serializable
JVM中的确切行为是什么?因此,它是否始终保持“持久”副本,从而使我的内存占用量增加一倍?如何在运行时编写对象的二进制副本而不将 JVM 变成内存占用者?
PS:内存消耗增加最多的方法是下面的一种。该文件有大约 229,000 行,每行 202 个字段。
哦!,HashMapX 是一个内部类,声明如下:
android - Android:在不使用 marshall() 的情况下从 Parcelable 到 Serializable 的任何快捷方式?
我知道Parcelable
(快)和Serializable
(慢)之间的性能差异。但是,我需要持久存储某些应用程序信息,而不仅仅是在一个生命周期内,因此使用 Parcelable 对象的 onSaveInstanceState 和关联方法是不合适的。
于是我把注意力转向了Serializable
。主要是我有AbstractList
要存储的类型——这很好,因为它们实现了Serializable
. 但是,我在其中存储的许多类型都是Parcelable
但不是Serializable
,例如RectF
.
我认为“没问题”,因为我可以轻松地生成一个 Parcel,Parcelable.writeToParcel(parcel, flags)
然后调用marshall()
它来创建一个byte[]
我可以序列化和反序列化的 Parcel。我想我会使用泛型;创建一个类,为我希望序列化SerializableParcelable<Parcelable> implements Serializable
的所有类型提供一个适合的解决方案。Parcelable
然后我会例如将每个 RectF 存储在这个包装器中ArrayList
,并且你瞧,列表和它的Parcelable
内容是可序列化的。
但是,API 文档声明marshall()
不得用于持久存储:
公共最终字节 [] 马歇尔 ()
返回包裹的原始字节。
您在此处检索的数据不得放置在任何类型的持久存储中(在本地磁盘上、通过网络等)。为此,您应该使用标准序列化或另一种通用序列化机制。Parcel marshalled 表示针对本地 IPC 进行了高度优化,因此不会尝试保持与平台不同版本中创建的数据的兼容性。
所以现在我被困住了。我可以忽略此警告并遵循我上面概述的路线,或者通过扩展Parcelable
我想要序列化的每个人并创建定制的序列化方法来规避这个问题,这似乎非常浪费时间和精力。
有谁知道Parcelable
不使用序列化对象的“正确”快捷方式marshall()
?或者我应该在不注意指定警告的情况下继续耕种?也许 SQLite 数据库是要走的路,但我不确定,希望得到您的建议。
非常感谢。
java - Groovy Expando 可序列化
有没有办法序列化可以通过动态添加的属性检索的扩展子类。举个例子;
和
我得到输出:
我还尝试了与 Sexpando 对象的原始testProp字段相同的示例(上面已注释掉)
可以从这里检查 Groovy 的原始 Expando.java
谢谢你的任何建议!
java - 扩展了一个可序列化的类,如何在远程调用中使用?
这是我的情况:
我有一个服务器应用程序,提供一个远程接口,它使用 bean 对象作为调用参数/返回值。这些当然是可序列化的。例如,在外科工作的医生。
对于我的本地应用程序,我扩展了这些调用对象:例如,医生有一个额外的密码字段,因此医生的密码可以存储在本地。现在我的本地对象也是可序列化的,我也使用它通过本地网络发送这些。
现在对我来说,在远程调用服务器时使用扩展实现的对象最简单的方法是什么?服务器显然无法重建我的序列化实现,因为他不知道我的专业类。
我是否必须通过基本上复制除新字段之外的所有字段来从我的扩展对象中手动创建一个未扩展的 bean 对象?还是有更好/更简单的方法来做到这一点?覆盖序列化方法不是一种选择,因为如上所述,我仍然需要我的本地对象也可以正常序列化。
java - 将序列化对象从客户端传递到 Spring 控制器并取回序列化对象响应的最简单方法?
我一直在阅读很多关于这方面的教程,我已经能够使用 HttpClient 发布一个 POST 到 spring 并获取响应,但它只是使用传入的字符串。例如,我想序列化一个对象Map <String, String> testMap = new HashMap <String, String> ()
,然后从客户端将其传递给 Spring 控制器。然后,为了简单起见,我只想将这个相同的对象从 Spring 返回给客户端。我不在乎它是否使用 HttpClient 或其他东西,我只想找到一种方法来完成这项工作。
我尝试过寻找不同的方法,但我似乎无法将它们拼凑在一起。任何人都可以将我指向一个概述了执行此操作的简单方法的资源。我将不胜感激任何建议,谢谢
android - Android可序列化问题
我创建了一个类,它有几个成员变量,所有这些都是可序列化的......除了一个位图!我试图扩展位图并实现可序列化,而不是认为位图是最终类。
我想保存这个类(它基本上形成了游戏的当前状态),以便玩家可以拿起并加载游戏。
我看到它的方式有两个选择:1)找到另一种保存游戏状态的方法。这里的任何帮助将不胜感激。
2) 将位图成员变量更改为 int,例如,并创建一个 BitmapGetter 类,该类具有返回基于 int 的位图的静态方法。(这个选项并不容易,因为我的课程包含很多位图可能性,而我创建游戏的方式意味着这将需要大量的努力。
基本上我没有人可以责怪我自己懒惰地创建一个位图变量而不加思考,但我将不胜感激任何帮助......
java - Java RMI,一个接口在网络服务器上作为远程发布,而它不应该
我遇到了一个讨厌的问题,但首先让我解释一下上下文。
该项目只是一个简单的项目,所以我熟悉 RMI。该项目是一个股票市场服务器和一个从服务器中提取资金数据的客户端。
我已将项目分为 3 个 java 项目。服务器(具有 MockStockMarket 和 Fund)、客户端(具有 GUI 类和一个与服务器对话的类:BannerController)以及具有客户端和服务器都需要的接口(IStockMarket 和 IFund)的项目。
我希望我的bannerController 与StockMarket 对话,以便bannercontroller 获得资金。这是使用 getFunds() 完成的:ArrayList。
如您所见,StockMarket 应该是 Remote,而 Fund 应该是 Serializable。
问题是,由于某种原因,当我使用以下代码时:
IStockMarket(如预期)和 I Fund(未如预期)都变得远程。这不是我想要的。
记录一下:Fund 实现了 IFund,它扩展了 Serializable(所以没有远程),MockStockMarket 扩展了 UnicastRemoteObject 并实现了 IStockMarket,它扩展了 Remote。
这是发布这两个界面的 Web 服务器的屏幕截图:http: //imageshack.us/m/194/4755/rmiothinterfacespublis.png。
源代码: https ://rapidshare.com/files/2085773800/stockmarket.zip
spring - 春季交易中的一个连接?
我有几个与连接和弹簧交易有关的问题。
当在事务中执行多个执行 DML 和 DDL 操作的方法时,spring 是否使用相同的连接实例(传播级别需要)?我读过它确实保持相同的连接,但不知道为什么以及如何在技术上做到这一点?在解释如何提供 spring 源代码中的任何提示时,它会有所帮助。
如果我使用 Serializable 作为隔离级别,使用 Spring Declarative Transactions,spring 是否会确保在该方法或从原始事务方法调用的任何其他方法中执行数据库操作时始终使用一个连接?
考虑到这个主题,在使用 Spring Transactions 时我应该记住哪些要点?
对此主题的任何想法/帮助将不胜感激。谢谢。
更新 1 - 抱歉,我写的是可序列化传播级别而不是隔离级别。更正了它。
android - Serializable Parcelable 问题:RuntimeException: Parcelable 在写入可序列化对象时遇到 IOException
伙计们,我有最简单的课程,我想成为 Parcelable。我正在按照以下方式进行操作:
很简单吧?是的,看起来。但是当我尝试将我的类对象作为包裹对象发送到另一个活动时,例如:
我收到以下异常:
无法真正理解这里的内容是不可序列化的吗?
java - 嵌套基类的莫名其妙的 Netbeans 可序列化警告
当我定义以下类时
Netbeans 6.9.1 给了我关于外部和内部的“没有 serialVersionUID 的定义”警告。我想知道这个警告是否有正当理由,或者它是否是一个错误。扩展一个内部类如何让编译器认为他们正在实现 Serializable?
注意:这更多是出于好奇,而不是想要这种不必要的设计模式。