gpt4 book ai didi

Java 将对象转换为字节数组的高效方法

转载 作者:行者123 更新时间:2023-12-01 12:48:56 26 4
gpt4 key购买 nike

我想将我的 pojo 对象转换为字节数组。我的所有对象都是可序列化的。我用的是

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

ObjectOutputStream o = new ObjectOutputStream(byteArrayOutputStream);
o.writeObject(myobject);

byte [] byteArray=byteArrayOutputStream.toByteArray();
o.flush();
o.close();
byteArrayOutputStream.flush();
byteArrayOutputStream.close();

当使用多个线程将对象转换为字节数组时,此转换需要更多时间,并且每次转换(相同对象转换为字节数组)的时间消耗逐渐增加。 (例如,第一个线程转换需要 200 毫秒,第二个线程对于相同的对象转换需要 300 毫秒)。谁能告诉我为什么这个对象转换时间逐渐增加以及更好的转换方法。 (我找到了一种使用外部化的方法。但随后我的所有对象都必须使用外部化重写。)

最佳答案

Can any one let me know why this object conversion time gradually increase and a better way to convert.

ObjectOutputStream 会产生大量垃圾,这会给 L3 缓存、主内存总线和 GC 带来压力。这些是共享资源,即一个线程的工作会影响所有其他线程。

注意:无论您的插槽上有 1 个核心还是 12 个核心,这对您来说都是一个问题。

I found a way using Externalization.

如果您想避免使用其他序列化库(例如 Kryo、thrift、protobuf 等),这可能是最简单的解决方案。我有一个我声称最快的解决方案,但它绝对不是最简单的。例如它直接从 native 内存进行转换,并完全跳过 byte[] ;)

But then my all objects have to be rewritten with Externalizable.

您可以只从一个类开始,即添加最高负载的类,不需要全部完成。

关于Java 将对象转换为字节数组的高效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24406248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com