问题标签 [java-custom-serialization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
13884 浏览

java - 除了给出瞬态关键字之外,我们可以拒绝序列化的 java 对象吗

我们可以通过使用transient关键字来避免序列化字段。有没有其他方法可以做到这一点?

0 投票
1 回答
2361 浏览

java - writeObject 和 readObject 是如何工作的?

当我阅读 JDK 6.0 的源代码时,我在 ArrayList 中找到了这两个方法。你看他们都是私人的。但是经过搜索,我没有找到任何其他调用它们的方法。我也考虑了本地方法,但仍然找不到。这两个方法似乎是处理 IO 的,但它们从来没有被调用过。

所以,我的问题是,它们是如何工作的?还有其他方法可以调用私有方法吗?

0 投票
1 回答
522 浏览

java - 如何在域 bean 之外实现 Jackson 自定义序列化?

我有一个 Spring 管理的 bean...

...并且因为我使用 Dojo Dgrid 来显示这个 bean 的 ArrayList,所以我将它作为 JSON 字符串返回到控制器中:

但是,我的网格需要一个附加列,其中包含每个 Foo 的有效操作;该操作并不真正依赖于单个 Foos 中的任何数据——它们都将具有相同的有效操作——在生成的 DGrid 的每一行上重复——但该值实际上取决于会话中的安全角色......不能在 Json 中发送到前端。所以,我的解决方案是双重的:

  1. 首先,我需要在 bean 中添加一个“虚拟”Json 属性...我可以在 bean 中使用 @JsonProperty 在方法上执行此操作...

    /li>
  2. ...但它只是生成一个占位符。要真正生成一个有效的值,我需要引用会话的安全角色,我非常不愿意在上面的方法中编码。(域 bean 本身中的服务调用?似乎非常错误。)我认为我应该创建一个自定义序列化程序并将逻辑 - 以及对 Session.Security 角色的引用放在那里。我的直觉是否正确,不要将会话信息注入域 bean 方法?如果是这样,这样的
    自定义序列化程序会是什么样子?

0 投票
1 回答
598 浏览

java - 自定义 BeanPropertyFilter - 仅序列化部分字符串

我急需帮助。我目前正在对 Content API 中的资源进行一些安全限制,我需要:包括属性、截断属性(如果它们是 String.class)或从序列化对象中删除属性,基于 SecurityContext。

我使用 Jackson 作为我的 json 序列化程序,并选择使用 BeanPropertyFilter 来检查每个属性是否应该被序列化。

现在删除和包含选项非常简单,无论我是否序列化 bean。

但是 truncate 选项有点糟糕。所以这是我到目前为止关于属性序列化所做的事情。

问题是,在 BeanPropertyWriter.assignSerializer() 方法中有一个保护,不允许我为该属性切换新的自定义序列化程序。

有什么方法可以连接和修改 bean-value 吗?或者我是否必须覆盖工厂和 BeanPropertyWriter 才能覆盖 assignSerializer() 方法(以避免序列化程序保护)?

我不能只用一个特殊的编写器来注释我的属性,因为序列化的对象对 SecurityContext 一无所知,所以没有办法将 securityContext 注入到自定义序列化程序中。

有什么办法可以让这个截断选项发生(不会让它太老套)?

提前致谢。

//最好的问候,马丁。

更新

根据 StaxMan 的回答,我已将方法更新为如下所示,并且似乎有效。至少我所有的测试都能正常运行。将在开发应用程序服务器上进一步测试。

0 投票
1 回答
1241 浏览

serialization - 使用 Kryo 序列化具有不可序列化属性的类

我正在使用 Kryo 序列化器来序列化我的 Java 对象

我的 Java 对象是这样的

B、C 和 D 是第三方库,不可序列化。我也不能编辑他们的代码。

我正在使用这样的 Kryo 来序列化 A a = new A (); //填充 A Kryo 的属性 kryo = new Kryo(); 输出输出 = new Output(new FileOutputStream("file.bin")); kryo.writeClassAndObject(输出, A ); 输出.close();

并反序列化

执行时,我得到 ConcurrentModificationException

当我使 B、C、D 瞬态时,它可以正常工作。但我也想序列化 B、C、D。

kryo 可以帮忙吗?如果是,那么正确的方法是什么?

0 投票
1 回答
52 浏览

java - 如何在 Spring MVC 中为两个不同的 api 使用两个不同的自定义序列化器序列化 POJO?

我正在使用 Spring MVC 创建一个宁静的 API。我有两个不同的 API 端点,我需要以两种不同的方式序列化相同的 POJO。我在下面说明了相同的内容:

课程 API

我的CoursePojo 就是按照上面的结构,所以默认的序列化是有效的。

现在,对于另一个StudentsAPI

我的Student课看起来像这样:

请注意,类中没有institute属性,Student因为机构可以从course.getInstitute吸气剂中传递确定。但这最终会形成类似于课程 API 的序列化结构。如何在不修改 POJO 结构的情况下仅为学生 API 使用自定义序列化。

我想到了 N 个解决方案,这是我想知道的最优雅和首选的解决方案。

0 投票
1 回答
334 浏览

java - simulating java object externalization via custom serialization

The main benefit of externalization over serialization is that externalization persists only part of the object, not the whole object as in case of serialization. But i think that we can simulate externalization via custom serialization if we will not call defaultWriteObject() method of ObjectOutputStream in writeObject() method of the serializable class. So without calliing defaultWriteObject() method and only persisting the needed instance variables of serializable class in writeObject() method we can achieve externalization benefits.

Here is an example demonstrating the aforementioned things:

The output for this code is:

As you can see, the oos.defaultWriteObject() and ois.defaultReadObject(); are commented and we persist and restore only the instance variable i.

So, is my assumption correct that we can simulate externalization concept via custom serialization ?

0 投票
1 回答
192 浏览

java - 自定义序列化和外部化之间的区别?

最近从任何渠道了解到,自定义序列化是一个过程,我们可以在我们的 Serializable 类中定义 writeObject(ObjectOutputStream os) 和 readObject(ObjectInputStream is),这些方法将在序列化和反序列化时执行分别执行我们的功能。

后来,我才知道 Externalization 是一个接口,它定义了 2 个方法: 1- writeExternal() 2- readExternal()

当我们不想序列化整个对象时,我们的类可以实现 Externalizable 并覆盖这些方法。这些方法将在序列化和反序列化时执行。

我怀疑为什么我们不能通过实现 Serializable 并定义 writeObject(ObjectOutputStream os) 和 readObject(ObjectInputStream is) 方法来使用自定义序列化,甚至序列化对象的某些属性。为什么这种外化出现在画面中。

谢谢,

0 投票
1 回答
139 浏览

scala - 创建一个 json 反序列化器并使用它

您如何创建杰克逊自定义序列化程序并在您的程序中使用它?序列化器用于序列化来自 kafka 流的数据,因为如果遇到空值,我的作业将失败。

我尝试了以下方法来创建序列化程序。

我正在尝试以这种方式使用它。

我收到一条错误消息

0 投票
2 回答
244 浏览

hazelcast - 如何在 hazelcast-client.xml 中为自定义字节数组序列化配置列表类型

我使用 ByteArraySerializer 创建了一个自定义序列化类,如下所示。

现在我需要在 hazelcast-client.xml 中进行配置。我尝试定义如下。

Hazelcast 无法识别类。引起:com.hazelcast.nio.serialization.HazelcastSerializationException:java.lang.ClassNotFoundException:java.util.List

有没有办法在 hazelcast-client.xml 中为具有泛型的集合(List,Set)定义类型类?