【问题标题】:Convert java class fields directly to byte array将java类字段直接转换为字节数组
【发布时间】:2014-06-16 07:47:19
【问题描述】:

让我上一堂简单的课

public class A
{
    public int a;
    public int b;
    public byte c;
    public byte  d;
    public B e;
    public C f;
    public byte[] g = new byte[5];
}

有没有办法不用手动将其转换为字节数组?结果数组中需要相同的字段顺序,并且不允许字节数组中的其他信息,只有字段值。

【问题讨论】:

  • 我猜是反思,但首先:你为什么要这样做?
  • 如果你想使用一个类作为一个结构,那么这很困难。您可以使用反射来获取字段,但没有顺序保证。
  • 你确定,你只是不需要序列化它?您将创建的数组有什么用?如果只是序列化/反序列化,请使用标准 ObjectOutputStream / ObjectInputStreams
  • 我有一个带有 C++ 应用程序的二元协议,可以将这些字节直接转换为 C 结构。
  • @Juvanis,你为什么改变了问题的意思?

标签: java serialization bytearray


【解决方案1】:

如果您喜欢使用反射,则无法保证检索字段的顺序。

所以你可以使用两种方法:

  • 按词汇顺序排列字段
  • 按照该字段在序列化中的顺序为每个字段添加注释

请注意,对于数组序列化,您必须知道数组的长度或使用分隔符来表示数组的结尾。在您的示例的简单情况下,这不是必需的,因为您只有 1 个数组。如果您有多个可变长度变量(例如字符串或数组),则必须这样做。

如果您需要在您的代码和外部代码之间共享这些数据,您必须确保您的序列化过程与外部程序的序列化过程相同。这意味着例如知道int 是否表示为BigEndian

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多