gpt4 book ai didi

java - 从 ByteBuffer 到对象

转载 作者:行者123 更新时间:2023-11-29 06:56:20 24 4
gpt4 key购买 nike

我想转换一个 ByteBuffer (来自网络流并按顺序由 <double, double, bool, int> 组成)到一个对象,例如给定类的 AClass :

class AClass {
public double aDouble;
public double anotherDouble;
public boolean aBoolean;
public int anInteger;
}

我们可以假设

  • ByteBuffer 中每个原始数据类型的大小已知且恒定(例如 double 为 4 个字节,boolean 为 1 个字节)。
  • ByteBuffer 中原始数据类型的顺序总是一样的。

是否有一种有效的(类转换)方式来转换 ByteBuffer给定的类对象?我可以使用某种掩码来屏蔽原始数据类型吗?

mask:  | double  | double  |bool| ...
bytes: | - - - - | - - - - | - | ...

基本上我正在寻找类似 Matlab's memmapfile 的东西功能。非常感谢。

最佳答案

您可以使用 Unsafe 来做到这一点。它支持直接在 native 内存和对象之间复制数据。但是在 Java 中,您无法控制字段的顺序,也无法控制使用了多少填充。例如boolean 可以放置在 int 之后以改进对象的对齐和打包,或者可以在字段之间添加填充。

您最好一次复制一个字段。虽然这可能看起来更慢,但实际上主要问题是将数据带入 L1 缓存,相比之下每个字段的副本都非常快。

关于java - 从 ByteBuffer 到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33420515/

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