Tag: 序列化

阻止GSON序列化JSON字符串

我是gson的新手,并且有一些我没有找到答案的新问题,所以请耐心等待。 StackOverflow和谷歌不是我的朋友:( 我有一个java类“User”,其中一个属性“externalProfile”是一个包含已经序列化的JSON的Java String。 当gson序列化User对象时,它会将externalProfile视为原语,从而转义JSON添加额外的斜杠等。我希望gson单独保留字符串,只是“按原样”使用它,因为它已经是有效且可用的JSON。 为了区分JSON字符串,我创建了一个名为JSONString的简单类,我尝试使用reader / writers,registerTypeAdapter,但没有任何作用。 你能帮我吗? public class User { private JSONString externalProfile; public void setExternalProfile(JSONString externalProfile) { this.externalProfile = externalProfile; } } public final class JSONString { private String simpleString; public JSONString(String simpleString) { this.simpleString = simpleString; } } public customJsonBuilder(Object object) { GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(GregorianCalendar.class, new JsonSerializer() […]

可外部化或可序列化?

在浏览了http://geekexplains.blogspot.com/2008/06/diff-between-externalizable-and.html上的文章后,我知道Externalizable比Serializalable更好,因为它提供了更好的代码控制,也更快。所以Externalizable应该是preizable而不是Serializable,前提是类定义没有改变。但是当我在任何项目中看到时,我发现只使用Serializable接口。 它是无知还是Serializalable提供了一些我缺少的其他优势?

使用序列化将对象传递给另一个JVM – 相同的Java版本和jar(都运行我们的应用程序)

更新:现在使用地图。 想要向其他实例发送内容的类发送对象即路由字符串。 使用对象流,使用Java serializable将对象写入servlet。 先写字符串然后再写对象。 接收servlet将输入流包装在ObjectInputStream周围。 首先读取字符串然后读取Object。 路由字符串决定它去了。 更通用的方法可能是发送类名及其声明的方法或Spring bean名称,但这对我们来说已经足够了。 原始问题 了解基本方法,但需要步骤的详细信息。 还知道我可以使用Jaxb或RMI或EJB …但是想使用纯序列化到bytearray然后进行编码,将它从jvm 1中的servlet 1发送到jvm 2中的servlet 2(同一个中的两个app server实例)局域网,在两个J2EE应用程序中设置相同的Java版本和jar) 基本步骤是(Approcah 1): – 将任何Serializable对象序列化为字节数组并生成一个字符串。 确切的代码见下文 Base64输出1.是否需要基于64或可以跳过第2步? 使用java.util.URLEncode.encode对字符串进行编码 命名参数后,使用apache http组件或URL类从servlet 1发送到2 在Servlet 2 J2EE框架上已经有URLDecoced它,现在只需执行反向步骤并根据param名称转换为对象。 既然两者都是我们的应用程序,我们就会知道类型/类映射的param名称。 基本上寻找在JVM之间发送对象的最快和最方便的方法。 示例:要发送的POJO类 package tst.ser; import java.io.Serializable; public class Bean1 implements Serializable { /** * make it 2 if add something without default […]

替换序列化数据中的类名

我想在序列化数据流中用“com.newPackage.className”替换字符串“com.oldpackage.className”。 从DB读取此序列化数据并在替换字符串后更新。 我在做同样的事情时遇到了一些问题。 如果您已经猜到了,这是重构练习的一部分。 是否有任何库可以帮助我操作序列化数据? 如果您还可以请注意任何预防措施或警告,这将是非常有帮助的。 非常感谢,克里斯。 PS:旧类和新类都没有声明serialversion ID作为其字段的一部分。

使用Set面向循环依赖时的Java序列化错误

我的项目是使用Hibernate和Weblogic服务器的EJB3的java项目。 为了方便起见(据我所知,这是典型的hibernate ),一些实体包含循环依赖(父知道孩子,孩子知道父母)。 此外,对于某些子类 – hashCode()和equals()方法依赖于它们的父类(因为它是唯一键)。 在工作时我看到了一个奇怪的行为 – 从服务器返回到客户端的一些集合虽然包含正确的元素,但它们的行为却没有包含任何内容。 例如,一个简单的测试,例如: set.contains(set.toArray()[0])返回false尽管hashCode()方法是一个很好的方法。 经过大量的调试后,我能够生成2个简单的类来重现问题(我可以向你保证,两个类中的hashCode()函数都是自反的,传递的和对称的 ): package test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.HashSet; import java.util.Set; public class ClientTest implements Serializable { public static void main(String[] args) throws Exception { SerializableClass serializationTest = new SerializableClass(); FieldOfSerializableClass hashMember = […]

序列化会保存超类字段吗?

我的子类实现了Serializable,但我的超类没有。 子类和超类都包含需要保存为子类状态的一部分的变量。 序列化会保存超类字段吗?

GWT IncompatibleRemoteServiceException

直截了当但令人抓狂,我在RPC调用时收到此错误: 处理此调用时抛出了IncompatibleRemoteServiceException。 com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException:com.milkrun.core.dto.UserBasket的类型签名无效 以下是导致问题的类: public class UserBasket implements Serializable{ private static final long serialVersionUID = -6761554796753637352L; public int userBasketID; public String description; public String userID; public List items; public String createUserId; public Timestamp createTs; public String lastUpdateUserId; public Timestamp lastUpdateTs; public Timestamp effStartTs; public Timestamp effStopTs; } 和BasketItem类型: public class BasketItem implements Serializable { private […]

Java Serializable,ObjectInputstream,非阻塞I / O.

我刚刚开始使用Java序列化,并且我不清楚如何在具有非阻塞I / O的场景中从源获取对象。 我能找到的所有文档建议使用ObjectInputStream是读取序列化对象的正确方法。 但是,正如我所提到的,我正在使用java.nio并执行非阻塞操作。 如果readObject()将阻塞,直到有新对象可用,这对我无济于事 总结..在使用Java NIO时如何进行序列化?

是否存在缓冲的ObjectInputStream?

我从一个350KB大小的文件反序列化一个对象,并花了相当长的时间。 我的计算机科学TA告诉我,有一种方法可以使用Buffered阅读器和ObjectInputStream来大大提高性能。 但是我在谷歌上找不到任何相关信息。

确定序列化对象的类型

我需要通过套接字发送消息(来自用户的请求到引擎,以及引擎对用户的响应)。 所以流程本质上是 +——–+ serialized request +——–+ | Server | | Client | +——–+ serialized response +——–+ ^ ^ | request/response | mouse/keyclicks | object | vv +——–+ +——–+ | Engine | | User | +——–+ +——–+ 现在,在这里重新发明轮子才有意义。 我正在处理双方的Java,所以我计划使用像这样的对象: /** * A Client makes a Request. */ abstract class UserRequest implements Serializable { /** * The […]