草庐IT

Serialization

全部标签

Java无效的流头问题

这个问题在这里已经有了答案:java.io.StreamCorruptedException:invalidstreamheader:54657374(2个答案)关闭3年前。我写了一个客户端-服务器应用程序,现在我面临一个我不知道如何解决的问题:这是客户端:try{Socketsocket=newSocket(ip,port);ObjectOutputStreamooos=newObjectOutputStream(socket.getOutputStream());SendMessagemessage=newSendMessage();message.numDoc=value.num

java - 如何序列化接口(interface)?

假设我有一个Serializable类ShapeHolder,它拥有一个实现SerializableShape接口(interface)的对象。我想确保保存了正确的具体形状对象(并且稍后恢复了正确的类型)。我怎样才能做到这一点?interfaceShapeextendsSerializable{}classCircleimplementsShape{privatestaticfinallongserialVersionUID=-1306760703066967345L;}classShapeHolderimplementsSerializable{privatestaticfinall

java - 序列化在构造函数中初始化的映射

我刚刚遇到一个与Java序列化相关的有趣问题。看来如果我的map是这样定义的:Mapparams=newHashMap(){{put("param1","value1");put("param2","value2");}};然后我尝试使用ObjectOutputStream将它序列化为一个文件:ObjectOutputStreamoos=newObjectOutputStream(newFileOutputStream(outputFile));oos.writeObject(params);...我得到java.io.NotSerializableException。但是,如果我以标

java - 如何解决 java.io.InvalidClassException : local class incompatible: stream classdesc serialVersionUID

这个问题在这里已经有了答案:Javaserialization-java.io.InvalidClassExceptionlocalclassincompatible[duplicate](4个答案)关闭8年前。我在一个没有指定serialVersionUID编码的如此大的项目中有一个可序列化的类,并将其作为blob保存在数据库MySQL中!我必须向这个类添加一些字段,但是在这样做之后,我得到了这样的异常:IOException:errorwhenreadingobjectorg.datanucleus.exceptions.NucleusUserException:IOExcepti

java - 有什么办法可以保存 `static members` 的状态吗?

就像我们使用序列化保存实例变量的方式一样,有什么方法可以保存static成员的状态吗?如果在某种情况下,必须恢复静态成员的状态才能恢复某些内容,该怎么做? 最佳答案 我想到的最简单的选择是使用singleton而不是静态字段。单例对象可以序列化和反序列化,您可以管理它的生命周期,同时保留静态字段为您提供的“全局状态”(也就是说,全局状态是一件坏事,但这是另一个话题)否则-静态状态在类加载器的整个生命周期(这通常意味着JVM的生命周期)中得到保留。因此,如果你想持久化状态,在关闭时执行它并在类加载时恢复它是有意义的。Runtime.a

java - 为什么 Serializable 接口(interface)不包含任何方法?

这个问题在这里已经有了答案:AlthoughtheSerializableinterfaceinJavahasnomethods,nofields,itcanachieveitsfunction.How?(6个答案)关闭7年前。我知道什么是序列化以及为什么要使用它,但我的问题是:为什么序列化是标记接口(interface)?在Serializable接口(interface)中没有writeObject、readObject的潜在好处是什么,因为当我们进行序列化时,我们最终会重写这两个方法?readResolve如何保证反序列化时创建的对象不是新对象。我知道下面的内容,它在反序列化期间

java - EnumSet 序列化

我刚刚花了几个小时调试我的应用程序,而且我相信我偶然发现了一个(另一个o_O)Java错误...嗅探...我希望不是,因为这会让人难过:(我正在做以下事情:创建带有一些标志的EnumSet掩码序列化它(使用ObjectOutputStream.writeObject(mask))清除并设置掩码中的一些其他标志再次序列化预期结果:第二个序列化对象与第一个不同(反射(reflect)实例的变化)得到的结果:第二个序列化对象是第一个对象的精确副本代码:enumMyEnum{ONE,TWO}@TestpublicvoidtestEnumSetSerialize()throwsException

java - 如何将多个对象写入可序列化文件并在程序再次使用时读取它们?

我想为我的项目维护一家银行的用户数据库。我能够将用户数量保存在一个可序列化文件中。但是当我尝试将用户保存到数据库时,它只会将最新的用户添加到数据库中。下面是编写对象的代码的偷窥高峰:if(e.getSource()==submit){if(uFName!=null&&uLName!=null&&uInitialDeposit!=0){if(uAccountType=="Savings"){RandomrandomGenerator=newRandom();//GetsthenumberofusersfromfileiffileexistsFilef=newFile(fileNameAd

java - 在实现可序列化的类上使用 serialVersionUID 和 @SuppressWarnings ("serial"的优缺点是什么?

这个问题一直是我团队中一些热烈讨论的主题。我个人的选择是使用@SuppressWarnings("serial")我的想法是,与使用相比,这意味着需要维护的东西少了serialVersionUID我是否认为使用它允许编译器生成UID,因此更有可能获取对类的更改?我最担心的是,依赖于开发人员在更改类时更改UID更有可能导致无法预料的错误。我的方法有什么缺陷吗?有没有其他人在使用这两种方法时有好的或坏的经历? 最佳答案 归结为以下问题:序列化流应该由相同的代码还是由不同的代码读取和写入?“不同的代码”可能意味着几件事:旧版本与新版本两个

Java 套接字 : Program stops at socket. getInputStream() 没有错误?

InetAddresshost=InetAddress.getLocalHost();Socketlink=newSocket(host,Integer.parseInt(args[0]));System.out.println("beforeinputstream");ObjectInputStreamin=newObjectInputStream(link.getInputStream());System.out.println("beforeoutputstream");ObjectInputStreamout=newObjectOutputStream(link.getOutp