草庐IT

Serialization

全部标签

java - 是否可以在没有外部类的情况下序列化匿名类?

我在网上做了一个小调查,并查看了该网站上的相关主题,但答案是矛盾的:有人说不可能,有人说可能,但很危险。目标是传递一个匿名类的对象作为RMI方法的参数。由于RMI要求,此类必须是可序列化的。没问题,很容易使类可序列化。但我们知道内部类的实例持有对外部类的引用(匿名类是内部类)。因此,当我们序列化内部类的实例时,外部类的实例和字段一起被序列化。这是问题出现的地方:外部类不可序列化,更重要的是-我不想序列化它。我想做的只是发送匿名类的实例。简单示例-这是一个RMI服务,其方法接受Runnable:publicinterfaceRPCService{Objectcall(Serializab

java对象序列化readObject/defaultReadObject

ObjectInputStream类中的readObject和defaultReadObject有什么区别?我似乎找不到太多关于差异的信息。 最佳答案 defaultReadObject()调用默认的反序列化机制,并在您在Serializable类上定义readObject()方法时使用。换句话说,当你有自定义反序列化逻辑时,你仍然可以回到默认序列化,这将反序列化你的非静态、非transient字段。例如:publicclassSomeClassimplementsSerializable{privateStringfld1;pri

java - jackson 根据类型反序列化

假设我有以下格式的JSON:{"type":"Foo""data":{"object":{"id":"1""fizz":"bizz"...},"metadata":{...},"owner":{"name":"John"...}}}我试图避免自定义反序列化器并尝试将上述JSON(称为Wrapper.java)反序列化为JavaPOJO。“类型”字段指示“对象”反序列化,即。type=foo表示使用Foo.java反序列化“对象”字段。(如果type=Bar,则使用Bar.java反序列化对象字段)。元数据/所有者将始终使用一个简单的Jackson注释Java类以相同的方式反序列化每个。

java - 为什么 ObjectOutputStream.writeObject 不采用可序列化?

为什么ObjectOutputStream.writeObject(Objecto)不带Serializable?为什么它需要一个Object? 最佳答案 这是因为ObjectOutputStream中的writeObject覆盖了themethod在theObjectOutputinterface它不要求对象是Serializable。ObjectOutput接口(interface)指定允许将对象写入流或底层存储的方法,但这可以通过序列化以外的过程来实现。ObjectOutputStream实现了这个功能,但需要可序列化的对象。

java - 如何不序列化继承的非 transient 字段?

问题我有一个带有非transientboolean字段的可序列化类(我们称它为A),以及一个子类(B),该类的同一字段应该是transient的。我该怎么做?更准确地说,我希望在反序列化B时将字段恢复为默认boolean值(false),尽管我希望在反序列化A时将其恢复为正确的值。其他字段尽管如此,还是应该恢复从A继承的。在功能上,A代表一个在session之间恢复的对象,B是A的特定类型,其状态应在每个新session上重置。快速代码示例:publicclassAimplementsjava.io.Serializable{privateStringlabel;//non-trans

java - Jackson JSON - 反序列化 Commons MultiMap

我想使用JSON序列化和反序列化MultiMap(ApacheCommons4)。测试代码:MultiMapmap=newMultiValueMap();map.put("Key1","Val11");map.put("Key1","Val12");map.put("Key2","Val21");map.put("Key2","Val22");ObjectMappermapper=newObjectMapper();StringjsonString=mapper.writeValueAsString(map);MultiMapdeserializedMap=mapper.readVal

java - 专有 XML 文件(Roche LC480 .ixo 文件)中的二进制字段编码/序列化格式

我最近收到了一个由RocheLightCycler480仪器生成的示例导出文件。它使用专有的XML格式,对此我还没有找到规范。从这些类型的文件中,我想提取一些与我的目的相关的信息。尽管其中大部分都可以轻松解析和解释,但它包含许多(未填充的)base64编码的二进制/序列化数据字段,表示整数和/或浮点数数组。示例文件的链接可以在thisgist中找到。.我在这篇文章的末尾包含了它的一些片段。AcquisitionTable共包含19此类编码item条目。这可能代表整数(SampleNo)和浮点(Fluor1)值的数组。我仍然不清楚如何将解码的字节转换为整数或浮点值。当base64解码时,

java - 如何将两个 Java 序列化对象链接在一起?

有时(实际上很多)我们在Java中遇到两个对象指向同一事物的情况。现在,如果我们分别对这些进行序列化,那么序列化的表单具有对象的单独副本是非常合适的,因为应该可以在没有另一个的情况下打开一个。但是,如果我们现在对它们进行反序列化,我们会发现它们仍然是分开的。有什么方法可以将它们重新链接在一起吗?示例如下。publicclassExample{privatestaticclassContainerClassimplementsjava.io.Serializable{privateReferencedClassobj;publicReferencedClassget(){returnob

java - 为什么实现 Externalizable 需要一个默认的公共(public)构造函数?

如果我们正在实现Serializable,则不需要它。那么为什么会有这种差异呢?它与序列化的实际机制有何关系? 最佳答案 可以在http://www.jusfortechies.com/java/core-java/externalization.php上找到详尽的解释(尽管文章的语法可能会有所改进).简短的回答,以备将来引用,以防链接页面消失:Externalizable是扩展Serializable的接口(interface)。然而,与Serializable不同的是,仅通过读取序列化的字节流并不能恢复对象,而是调用公共(pub

java - ByteBuffer 可以实现 DataOutput/DataInput 吗?

java.nio.ByteBuffer有什么微妙的原因吗?没有实现java.io.DataOutput或java.io.DataInput,还是作者只是不选择这样做?映射调用似乎很简单(例如putInt()->writeInt())。我(显然还有一些others)的基本问题是较旧的类,它们知道如何使用通用接口(interface)DataInput/DataOutput来序列化/序列化它们自己。我想在不为ByteBuffer编写自定义代理的情况下重用我的自定义序列化。 最佳答案 只需将缓冲区包装在ByteArrayInputStre