Tag: 序列化

当只有子类实现可序列化时,序列化如何工作

只有子类实现了Serializable接口。 import java.io.*; public class NewClass1{ private int i; NewClass1(){ i=10; } int getVal() { return i; } void setVal(int i) { this.i=i; } } class MyClass extends NewClass1 implements Serializable{ private String s; private NewClass1 n; MyClass(String s) { this.s = s; setVal(20); } public String toString() { return s + ” ” + […]

深reflection比较等于

我试图通过比较结果对象与原始对象来validation序列化和反序列化例程。 例程可以序列化任意和深度嵌套的类,因此我想要一个比较例程,可以给出原始和最终实例,并反过来遍历每个值类型并比较值,并迭代地潜入引用类型以比较值。 我已经尝试过Apache Commons Lang EqualsBuilder.reflectionEquals(inst1, inst2)但这似乎没有进行非常深入的比较,它只是比较参考类型的相等性,而不是深入研究它们: 以下代码说明了我的问题。 对reflectionEquals的第一次调用返回true,但第二次返回false。 是否有人可以推荐的图书馆例程? class dummy { dummy2 nestedClass; } class dummy2 { int intVal; } @Test public void testRefEqu() { dummy inst1 = new dummy(); inst1.nestedClass = new dummy2(); inst1.nestedClass.intVal = 2; dummy inst2 = new dummy(); inst2.nestedClass = new dummy2(); inst2.nestedClass.intVal = 2; boolean isEqual = EqualsBuilder.reflectionEquals(inst1.nestedClass, […]

Jackson:将枚举值序列化和反序列化为整数

考虑以下枚举和类: public enum State { ON, OFF, UNKNOWN } public class Machine { String name; int numCores; State state; public Machine(String name, int numCores, State state) { this.name = name; this.numCores = numCores; this.state = state; } } 并考虑以下主要function: public static void main(String args[]) { Machine m = new Machine(“Machine 1”, 8, OFF); ObjectMapper mapper […]

什么时候在java中使用flush()?

import java.io. * ; public class Ser { public static void main(String args[]) { try { John myObj = new John(“Sachin”, “Cricket”); System.out.println(myObj); FileOutputStream fos = new FileOutputStream(“FileName”); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(myObj); oos.flush(); oos.close(); } catch (Exception e) { System.out.println(“Expection” + e); System.exit(0); } try { John myObj2; FileInputStream fis = new FileInputStream(“FileName”); […]

从GWT应用程序中执行RPC时出现SerializationPolicy错误

我收到以下exception: com.google.gwt.user.client.rpc.SerializationException:类型’java.lang.Long’未包含在可由此SerializationPolicy序列化的类型集中,或者无法加载其Class对象。 出于安全考虑,此类型不会被序列化 使用GWT 2.1和内置的Jetty服务器。 根据文档,这种类型绝对是可序列化的…如何将它包含在SerializationPolicy中?

对象序列化为JSON(使用Gson)。 如何在UpperCamelCase中设置字段名称?

我需要使用Google Gson库将简单Java对象列表序列化为JSON。 物体: public class SimpleNode { private String imageIndex; private String text; public String getImageIndex() { return imageIndex; } public void setImageIndex(String imageIndex) { this.imageIndex = imageIndex; } public String getText() { return text; } public void setText(String text) { this.text = text; } } 我已经为序列化编写了以下代码: List testNodes = repository.getElements(0); Gson gson = new […]

ObjectInputStream / ObjectOutputStream工作不对

我有类:Client,Server和Background正在使用Player类。 我真的不明白为什么带有ObjectInputStream / ObjectOutputStream Client类无法正常工作。 我做得不好? 哪里是我的错? package Shooter2Dv27082013; public class Player implements Serializable{ …. public int x=10; public int y=10; …. } package Shooter2Dv27082013; public class Background extends JPanel implements ActionListener, Serializable { public int countCollisions=0; private int time = 20; // 0.02s Timer mainTimer = new Timer(time, this); …. Player p = new […]

没有为类org.json.JSONObject找到序列化程序,也没有发现创建BeanSerializer的属性

从Web服务获得JSON,Json Array作为响应 [3] 0: { id: 2 name: “a561137” password: “test” firstName: “abhishek” lastName: “ringsia” organization: “bbb” }- 1: { id: 3 name: “a561023” password: “hello” firstName: “hello” lastName: “hello” organization: “hello” }- 2: { id: 4 name: “a541234” password: “hello” firstName: “hello” lastName: “hello” organization: “hello” } 在JsonArray中获取响应之后在读取Json数组的Json对象时获取错误: List list = new ArrayList(); JSONArray […]

(java)ObjectInputStream反序列化错误版本的对象

我只是从java书中学习网络,所以我有点像菜鸟。 我无法在书中或网上找到这个问题所以我决定问互联网。 该书说使用ObjectOutputStream和ObjectInputStream来发送和接收不同控制台的对象。 现在,我能够成功接收我发送的对象 – 但只能一次。 当我发送不同的对象:随机字符串和整数和无名实例时,控制台具有所有正确的字段。 但是当我发送一个对象的实例时,更改其中一个实例的字段的值,然后重新发送该对象,然后inpustream会加载原始实例的值。 所以,例如,我有一个类的实例,其公共int“var”等于1.如果我发送此类的实例,客户端会收到它并正确报告var = 1.但是,如果我更改var到2(在同一个实例中)并重新发送它,客户端将完成调用read()方法(因此它必须已经接收到新对象!),但它会将var报告为1.如果我将实例发送到一个尚未收到实例的不同客户端,它会正确地将var报告为2,即使我更改了var,它也会继续将其报告为2。 如果客户端之前没有收到该实例的正确版本,则该事实必须意味着该对象正在通过输出流正确发送; 由于某种原因,输入流不起作用。 它几乎就像它看到它是相同的对象所以它假定它具有相同的值而不检查。 为什么会发生这种情况,我该如何解决? 对不起,如果我问一些愚蠢的东西 – 这本书没有解释序列化和套接字如何工作,只是如何使用它们,所以我很可能从根本上对如何使用它们感到困惑。 谢谢! 我编写的简单代码来测试问题: 服务器:(有一个计时器动作来继续发送更新的对象) public void actionPerformed(ActionEvent e) { object.var++; output.write(object); output.flush(); System.out.println(object.var); } 客户 public void run() { while(true) { Test t = (Test)input.readObject(); System.out.println(t.var); } } 当这些程序运行时,Server类的输出是1,2,3,4 ……无限增加,而Client的输出只有1,1,1,1,1,1,1等。 感谢您抽出时间来阅读。 对不起,如果我只是愚蠢,我是这个东西的新手。 编辑:对不起,read()是一个错误的类型(我手动输入代码因为我无法正确格式化),我的意思是input.readObject()

java对象序列化readObject / defaultReadObject

ObjectInputStream类中的readObject和defaultReadObject什么区别? 我似乎无法找到有关差异的非常多的信息。