我想尝试滥用Java类作为结构,我想知道是否可以将字节数组序列化为类和其他方式。
所以,如果我有这样的课程:
public class Handshake
{
byte command;
byte error;
short size;
int major;
int ts;
char[] secret; // aligned size = 32 bytes
}
是否有一种简单的方法(无需手动读取字节并填写需要3倍代码的类)来反序列化一组字节到这个类中?我知道Java没有结构但是我想知道是否可以简化序列化过程以便它自动完成。 字节不是来自Java的序列化程序,它们只是从C结构派生的对齐字节。
答案 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,并且您被迫编写自己的库,请务必小心。