Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:在readObject/writeObject方法中传递参数_Java_Serialization - Fatal编程技术网

Java:在readObject/writeObject方法中传递参数

Java:在readObject/writeObject方法中传递参数,java,serialization,Java,Serialization,为了自定义对象的序列化,我重写了方法readObject/writeObject。问题是这些方法不带参数。在这些方法中是否有传递参数的方法,以便我可以在序列化过程中使用它们 提前感谢您不,没有传递参数的选项,而且您为什么需要这样做 序列化、反序列化是写入和读取对象状态的过程,因此在序列化或反序列化之前,类应该具有其中的所有属性 没有任何理由向这两个方法传递参数。您不能更改读/写方法的签名。一种解决方法是在对象中设置并存储序列化参数,并在读/写方法中使用它们 或者您可以创建一个静态类,类似Seri

为了自定义对象的序列化,我重写了方法
readObject/writeObject
。问题是这些方法不带参数。在这些方法中是否有传递参数的方法,以便我可以在序列化过程中使用它们


提前感谢您

不,没有传递参数的选项,而且您为什么需要这样做

序列化、反序列化是写入和读取对象状态的过程,因此在序列化或反序列化之前,类应该具有其中的所有属性


没有任何理由向这两个方法传递参数。

您不能更改读/写方法的签名。一种解决方法是在对象中设置并存储序列化参数,并在读/写方法中使用它们


或者您可以创建一个静态类,类似SerializationParameter,并将序列化参数存储在那里。因为它们是静态的,所以不必在内存中为每个序列化对象复制它们。

这些参数是如何准确传递的?调用
objectOutputStream.writeObject(foo)
时,不能给出任何参数。这个问题没有多大意义。这些方法用于序列化对象的状态,对象应该可以访问它们。你为什么要通过ARG考试?如果定制序列化需要一些信息,而不是它应该是ObjectState的一部分,那么您希望得到什么样的参数?序列化对象只需要对象。如果您想要自定义序列化,则需要以不同的方式实现它。问题是这些方法确实采用参数:流对象。你真正的问题是什么?我有一个类似的要求。需要它的原因是初始化瞬态字段,这些字段取决于对象还原时的当前环境状态,并且不是对象的永久属性。pablo建议的解决方案是正确的想法:将ObjectInputStream子类化并在子类中传递参数。对象类的readObject方法可以访问参数并初始化瞬态字段。我同意,在大多数情况下,它没有任何意义,但让我解释一下我的场景。我有一个包含字段的类记录。每个字段根据作为记录属性的编码写入/读取其有效负载。您是否建议对此采取不同的解决方法?如果字段依赖于编码,则编码应该是字段的一部分,这样可以解决此问题。如果此编码对记录的每个字段都相同,则在每个字段上添加属性编码将是冗余的。我想要一个能够有效处理这些情况的解决方法。物理字段依赖于记录编码,要么字段应该有编码作为属性,要么字段应该有编码的引用,这样会更好。事实上,字段在记录上有引用,但我认为这是混淆了事情,我决定将其切断。更一般的一点是,我需要调用方的引用(因为我写记录对象,记录对象在字段上有引用,所以我想知道是什么记录实际触发了字段对象的写入操作)