草庐IT

Serialization

全部标签

java - 序列化的 Java 对象是否应该在每次序列化时始终由相同的字节序列表示?

例如,如果对象实例被序列化(导致'byte[]bs1')然后再次被序列化(导致'byte[]bs2'),'bs1'和'bs2'应该是相同的长度并且包含相同的字节?如果不是,为什么不呢?为了避免歧义,我应该说同一个对象(不是两个“相同”对象-同一个实例)的两次序列化发生在彼此的毫秒内,在同一个线程中,在同一个JVM上-一个之前(可变)对象被传递给一个方法,一个之后。请注意,该对象甚至没有被序列化、反序列化,然后重新序列化——它只是被序列化了两次。此外,关于对象的类也没有任何“聪明”之处;它只是一个简单的聚合POJO。我使用序列化字节作为临时测试来检测对象是否已在方法内更改。然而,我似乎看

java - 如何使用 Jackson 将列表内容序列化为平面 JSON 对象?

给定以下POJO..publicclassCity{privateStringtitle;privateListpeople;}...publicclassPerson{privateStringname;privateintage;}我想让Jackson将类的实例序列化为以下示例JSON:{"title":"NewYork","personName_1":"JaneDoe","personAge_1":42,"personName_2":"JohnDoe","personAge_2":23}JSON格式由我无法更改的外部API定义。我已经发现我可以使用自定义序列化器来注释列表字段,例

java - jackson :忽略 setter/getter ,但不是@JsonView

我正在寻找仅在某些情况下序列化transient信息的可能性:@JsonInclude(Include.NON_NULL)@EntitypublicclassUser{publicstaticinterfaceAdminView{}...id,emailandothers...@TransientprivatetransientDetailsdetails;@JsonIgnore//Goal:ignoreallthetime,exceptnextline@JsonView(AdminView.class)//Goal:don'tignoreinAdminViewpublicDetail

java - 如何在标准序列化中序列化不可序列化的基类?

我无法控制基类的源代码,那么,如何在子类上使用标准序列化呢?在这个例子中,字段a根本没有被序列化,尽管B是可序列化的://一个.jarclassA{inta;}//b.jarclassBextendsAimplementsSerializable{intb;}publicclassHelloWorldApp{publicstaticvoidmain(String[]args)throwsException{Bb=newB();b.a=10;b.b=20;ByteArrayOutputStreambuf=newByteArrayOutputStream();ObjectOutputStr

java - 如何使用 HttpURLConnection 将序列化对象从 Java 类发送到 Servlet?

我想将序列化对象从Java类发送到servlet,servlet应在其中检索对象并将其保存为文件。我知道我必须使用HttpURLConnection向servlet发出POST请求,但我不知道下面的代码是否正确。privatestaticHttpURLConnectionurlCon;privatestaticObjectOutputStreamout;publicstaticvoidmain(String[]args){Namesnames=newNames();names.setName("ABC");names.setPlace("Bangalore");URLurl;try{u

java - 如何摆脱 InvalidClassException SerialVersionUID?

我在数据库中保存了一个java对象,然后几天后我更改了我的jre版本。现在,当我尝试读取同一个对象时,出现以下异常:Exceptioninthread"main"java.io.InvalidClassException:SerializeMe;localclassincompatible:streamclassdescserialVersionUID=-6377573678240024862,localclassserialVersionUID=-8204757486033751616我怎样才能摆脱这个,我怎样才能得到保存的对象?请帮助我。 最佳答案

java - 为什么class需要实现serializable marker interface进行序列化?

这个问题在这里已经有了答案:WhyJavaneedsSerializableinterface?(13个答案)关闭9年前。技术上我知道为什么类需要实现可序列化。原因是ObjectOutputStream的writeObject方法在写入对象状态之前在内部检查“可序列化实例”。但我的问题是,这样做有什么必要?writeObject方法可以简单的写出对象的状态无论对象(需要写的状态)是否实现了serializable?根据wiki,类实现此接口(interface)以指示其非transient数据成员可以写入ObjectOutputStream。但同样的问题是为什么类需要实现可序列化来确定

java - 使用 Jackson 反序列化枚举 Shape.OBJECT 失败

我有以下枚举声明:@Document@JsonFormat(shape=JsonFormat.Shape.OBJECT)@JsonAutoDetect()publicenumCompass{north("UpperCenter"),south("LowerCenter"),east("LeftCenter"),west("RightCenter"),ne("UpperRight"),nw("UpperLeft"),se("LowerRight"),sw("LowerLeft"),;@JsonPropertyprivateStringpresentableName;@JsonProper

java - Jackson JSON 给出了嵌套类集合的异常

JacksonJSON序列化/反序列化这个类没有问题:publicclassMyClass{publicclassNested{publicStringstring;publicNested(){}}publicNestednestedVar;}但是在这一个上:publicclassMyClass{classNested{publicStringstring;publicNested(){}}publicNestednestedVar;publicListnestedList;}反序列化时出现异常:com.fasterxml.jackson.databind.JsonMappingEx

java - lambda 表达式的序列化有哪些安全风险?

刚刚回顾了Streams和Java8Lambda功能,以及对不言自明的Oracle文档的最后评论LambdaExpressions状态:Youcanserializealambdaexpressionifitstargettypeanditscapturedargumentsareserializable.However,likeinnerclasses,theserializationoflambdaexpressionsisstronglydiscouraged.检查这个我发现了SO问题Howtoserializealambda?OP正在处理来自客户端代码的序列化lambda表达式