Java中基于字节的(de)序列化?

时间:2011-08-01 14:31:35

标签: java serialization

我想尝试滥用Java类作为结构,我想知道是否可以将字节数组序列化为类和其他方式。

所以,如果我有这样的课程:

public class Handshake
{
    byte command;
    byte error;
    short size;
    int major;
    int ts;
    char[] secret; // aligned size = 32 bytes
}

是否有一种简单的方法(无需手动读取字节并填写需要3倍代码的类)来反序列化一组字节到这个类中?我知道Java没有结构但是我想知道是否可以简化序列化过程以便它自动完成。 字节不是来自Java的序列化程序,它们只是从C结构派生的对齐字节。

3 个答案:

答案 0 :(得分:2)

  

字节不是来自Java的串行器,它们只是对齐的字节   源自C结构。

糟糕的主意。一旦有人在不同的平台上编译代码,使用不同的编译器或设置等,它就会崩溃。

好多了:使用标准化的二进制接口,在Java和C ++中实现,如ASN.1或Google的Protocol Buffers

答案 1 :(得分:0)

您可以编写一个库来使用反射进行反序列化。这可能会导致需要更多代码,但可能符合您的需求。与C语言不同,它在Java 16位而不是8位而且char []是一个单独的对象中是不值得的。

简而言之,您可以编写一个读取此数据的库,而无需触及Handshake类。只有你可以决定这是否比在握手类中添加一个或两个方法更容易..

答案 2 :(得分:0)

不要那样做!我迟早会打破。使用一些二进制序列化格式,如[Hessian] [1],它支持java和C ++(我不知道任何适用于普通C的东西)
还记得C不强制int或long的大小,它们是平台相关的。 因此,如果您必须使用C,并且您被迫编写自己的库,请务必小心。