草庐IT

Serialization

全部标签

java - 什么时候 Java 对象可序列化但不可克隆才有意义?

如果Java类实现了Serializable接口(interface)但没有公共(public)的clone()方法,通常可以像这样创建深拷贝:classCloneHelper{@SuppressWarnings("unchecked")publicstaticTclone(Tobj){try{ByteArrayOutputStreambaos=newByteArrayOutputStream();ObjectOutputStreamoos=newObjectOutputStream(baos);oos.writeObject(obj);oos.close();byte[]bytes=

java - 将对象列表序列化为java中的文件

我有一个包含大约20,000个对象的列表,这些对象又具有非常庞大的层次结构。我需要将对象转储到一个文件中,以便我可以在以后的过程中随时读取它。现在我的问题是,我从事过Java方面的工作,但对序列化的了解并不多,而且我不太了解如何做到这一点。据我所知,在这种情况下,我需要同时使用序列化和反序列化。谁能帮忙。我也可以使用任何新的API或普通的Java序列化。问候。 最佳答案 查看此链接http://www.java2s.com/Code/Java/File-Input-Output/Objectserialization.htm它是这样

java - Java中匿名类的序列化

是否可以在Java中对匿名类进行序列化/反序列化?例子:ByteArrayOutputStreamoperationByteArrayStream=newByteArrayOutputStream();ObjectOutputStreamoos=newObjectOutputStream(operationByteArrayStream);oos.writeObject(newTask(){publicvoidexecute(){System.out.println("Dosomecustomtask"));}});我的问题是我想做一些自定义的管理任务,这样我就不需要为每个任务都发布一

java - 为什么静态变量是序列化的?

publicclassMySerializableimplementsSerializable{privateintx=10;privatestaticinty=15;publicstaticvoidmain(String...args){AnotherClassa=newAnotherClass();AnotherClassb;//Serializetry{FileOutputStreamfout=newFileOutputStream("MyFile.ser");ObjectOutputStreamOout=newObjectOutputStream(fout);Oout.writ

java - 为什么不在 Java 中序列化抽象类?

我读到一般抽象类不应该在Java中被序列化。子类应该是可序列化的(如果需要,可以使用自定义读取、写入方法,例如,当抽象类具有字段时)。这背后的原因是什么?为什么它被认为是糟糕的设计?更新1:我有一个包含一些字段和三个子类的抽象类。截至目前,我正在使用以下方法。我已经使所有的子类都可以使用自定义的读取、写入方法进行序列化。在抽象类中,我有以下方法。voidwriteFields(ObjectOutputStreamout)throwsIOException{....}voidreadFields(ObjectInputStreamin)throwsIOException,ClassNot

java - 对象反序列化是在 Java 中实现原型(prototype)模式的正确方法吗?

长话短说我可以使用Serializable接口(interface)、ObjectOutputStream和ObjectInputStream类来使用Java序列化/反序列化,并且可能添加readObject和writeObject在实现Serializable的类中是否是原型(prototype)模式的有效实现?注意事项这个问题不是讨论使用复制构造函数是否比序列化/反序列化更好。我知道PrototypePattern概念(来自维基百科,强调我的):Theprototypepatternisacreationaldesignpatterninsoftwaredevelopment.It

JavaSparkContext 不可序列化

我将spark与cassandra一起使用,我有一个JavaRDD客户。对于每个客户,我想从cassandra中选择他这样的交互:avaPairRDD>a=client.mapToPair(newPairFunction>(){@OverridepublicTuple2>call(Strings)throwsException{Listb=javaFunctions(sc).cassandraTable(CASSANDRA_SCHEMA,"interaction_by_month_customer").where("ctid=?",s).map(newFunction(){@Overr

java - java 枚举上的自定义字段未被序列化

我有一个Java枚举,如下所示:publicenumExecutionMode{TYPE_A,TYPE_B,TYPE_C;privateExecutionMode(){}//noargsconstr-noreallyrequiredprivatebooleanincremental;//hasget/setprivateStringsomeStr;//hasget/set}我看到反序列化后,枚举上的自定义字段丢失了。在阅读更多有关它的信息后,我得到的印象是枚举被反序列化为一个字符串,因此它的自定义字段被忽略了。如果它是真的,我是不是在滥用Enum并且应该只使用POJOistead?或者

java - 从实现 Serializable 的旧 Java 类中删除字段

假设我有类MyClass的版本,其中我有两个字段intcount和Stringname。而且我已经将字节流保存到文件中。在我从类中删除属性name之后,持久字节流也被毫无问题地转换为对象。但根据Serializable文档添加新属性是兼容的更改,但删除属性是不兼容的更改w.r.t.序列化。我很困惑有人可以帮助我理解这一点。谢谢!!!!!! 最佳答案 几点:当一个对象被反序列化时,任何在字节流中不的字段都将被初始化为null。因此,当您添加一个新字段时,当一个新版本对象从旧版本字节流反序列化时,新字段将被初始化为null。如果null

java - serialversionuid 是如何计算的

当我在Eclipse中创建实现Serializable接口(interface)的Java类时,我收到警告TheserializableclassABCDdoesnotdeclareastaticfinalserialVersionUIDfieldoftypelong所以当我点击警告时,我在Eclipse中得到一个选项来AddgeneratedSerialVersionID一旦我选择了该选项,Eclipse就会自动为我创建一个serialVersionUID变量。现在我想知道生成该数字的依据是什么。这是一个任意随机数?我可以提供我自己的任意随机数吗? 最佳答