草庐IT

Serialization

全部标签

java - kryo 列表序列化

我正在尝试使用Kryo序列化某些对象的列表列表(自定义类:List>)。list2D;//List>whichisalreadyproduced.Kryok1=newKryo();Outputoutput=newOutput(newFileOutputStream("filename.ser"));k1.writeObject(output,(List>)list2D);output.close();到目前为止没问题,它写出列表没有错误。但是当我尝试阅读它时:Kryok2=newKryo();InputlistRead=newInput(newFileInputStream("file

java - 使用 Jackson ObjectMapper 将子类名称序列化为 JSON,而不是父类(super class)

在以下将对象序列化为JSON的Jackson/Java代码中,我得到了这个:{"animal":{"x":"x"}}然而,我真正想要得到的是:{"dog":{"x":"x"}}我可以对AnimalContainer做些什么,以便获得对象的运行时类型(“dog”、“cat”),而不是“animal”)?(编辑:我知道map名称来自getter和setter方法名称。)我能想到的唯一方法是在AnimalContainer中具有每种类型的动物的属性,具有所有动物的setter和setter/getter,并强制一次只有一个被重视。但这违背了拥有Animal父类(superclass)的目的,

java - 如何 append 到现有的 java.io.ObjectStream?

这个问题在这里已经有了答案:AppendingtoanObjectOutputStream(6个答案)关闭8年前。至于现在,当我尝试append一个对象时,我将得到java.io.StreamCorruptedException。我在互联网上搜索了一种方法来克服这个问题。到目前为止我找到的答案是无法完成。解决此问题的一种方法是将对象写入列表,然后将列表写入文件。但是我每次添加新对象时都必须覆盖该文件。加类似乎不是最优解。有没有办法将对象append到现有对象流?

java - 使用 GSON 反序列化为 ImmutableMap

我想使用GSON来反序列化:"starterItems":{"Appeltaart":3,"Soap_50":3}...进入GuavaImmutableMap:privateImmutableMapstarterItems;我以为我会使用常规的GSON映射解析,然后制作结果的不可变副本,如下所示:gb.registerTypeAdapter(ImmutableMap.class,newJsonDeserializer(){@SuppressWarnings("unchecked")@OverridepublicImmutableMapdeserialize(JsonElementjso

java - Jackson 仅序列化接口(interface)方法

我有一个对象A和一些方法ma,mb,mc并且这个对象实现了一个接口(interface)B只有ma和mb。当我序列化B时,我希望只有ma和mb作为json响应,但我也得到mc.我想自动化此行为,以便我序列化的所有类都基于接口(interface)而不是实现进行序列化。我应该怎么做?例子:publicinterfaceInterf{publicbooleanisNo();publicintgetCountI();publiclonggetLonGuis();}实现:publicclassImplimplementsInterf{privatefinalStringpatata="Pata

java - 在 UDP 上发送和接收序列化对象

我正在尝试使用UDP将序列化对象从服务器进程发送到Java中的客户端进程。问题是客户端在接收方法上被阻塞。有人可以帮忙吗?!这里是发送对象的服务器代码:ClientModelC1=newClientModel(100,"Noor","Noor",38,38,"asd");ByteArrayOutputStreambaos=newByteArrayOutputStream();ObjectOutputStreamoos=newObjectOutputStream(baos);oos.writeObject(C1);oos.flush();byte[]Buf=baos.toByteArra

java - 如何将 Jackson 的 ContextualDeserializer 用于根值?

我正在尝试为所有从某个抽象类扩展或实现某个接口(interface)的类实现通用反序列化器。在此示例中,我使用接口(interface)StringConvertible。我需要确定具体类型,以便创建实例。安oldforumpostbyProgrammerBruce引导我使用ContextDeserializer并且当StringConvertible是另一个类中的属性时它正在工作。但是当我想直接反序列化StringConvertible时,我找不到获取具体类型的方法,因为beanProperty参数是null。根据thisquestion/answer,显然这是预期的在Jackson

c++ - 反序列化中的文件损坏,如何防止崩溃?

我正在使用boost图形库来处理图形。我使用boost::serialization将我的图形写入文件。出于测试目的,我修改了文件的完整性。现在我的程序总是崩溃。我想知道有什么方法可以防止崩溃(boost::serialization不会抛出异常)。更一般地说,对于任何类型的文件,在解析时都不会抛出异常,所有的文件都应该是正确的,是否也有办法?也许唯一的解决方案是编写带有异常处理的自定义序列化/反序列化函数?谢谢!编辑:当所有数据损坏或文件丢失时,会出现boost::archive::archive_exception。但是如果只更改文件的某些部分,它会崩溃......Edit2:我应

c++ - Boost Serialization - 不再反序列化损坏的数据时没有 archive_exception?

几个月前我实现了一个组件,它通过UDP网络接收数据,通过Boost::Serialization反序列化它并开始处理传入的对象。在使用这个组件一段时间后发生了随机崩溃,当我发现其他人正在向我的UDP端口发送数据时我可以解决这个问题。我通过简单地在反序列化周围添加一个try/catch解决了这个问题:try{boost::archive::text_iarchiveinputArchive(incomingData);inputArchive>>givenElements;//theactualdeserialization,heretheexceptionhasbeenthrownin

c++ - 覆盆子 pi3 : C++ serial communication not working properly (Raspberry pi was working! )

我有一个RaspberryPIB+和一个能够与Arduino通信的C++应用程序。我能够读取、写入、串行连接perfeclty稳定。现在,我买了一个RaspberryPI3来集成更多的性能和wifi。花了很多时间后,我让QT应用程序再次运行,但串行通信无法正常工作。我连接了ArduinoIDE的串行监视器并使用RPI1检查它是否工作正常,我看到所有消息都按照我的协议(protocol)发送,所以我确信我可以分析我正在用RaspberryP3写的东西。不幸的是,我只收到奇怪的字符:我尝试了不同的波特率,例如115200和9600(预期波特率!)但结果不同但同样错误。我想报告一下我在Ras