我想尝试滥用Java类作为结构,为此,我想知道是否有可能将字节数组序列化为类,而另一种方式则相反。
所以如果我有这样的课:
public class Handshake
{
byte command;
byte error;
short size;
int major;
int ts;
char[] secret; // aligned size = 32 bytes
}
是否有一种简单的方法(不需要手动读取字节并填写需要3倍多代码的类)来将反序列化一组字节到这个类?我知道Java没有结构,但我想知道是否可以简化序列化过程,所以它可以自动完成。字节不是来自Java的序列化程序,它们只是从C structs.派生的对齐字节
发布于 2011-08-01 06:46:55
字节不是来自Java的序列化程序,它们只是从C结构派生的对齐字节。
馊主意。一旦有人在不同的平台上编译该代码,使用不同的编译器或设置等,它就会中断。
更好的方法是:使用标准化的二进制接口,并在Java和C++中实现,比如ASN.1或谷歌的协议缓冲器。
发布于 2011-08-01 06:38:09
您可以编写一个库来使用反射进行反序列化。这可能导致需要更多的代码,但可能适合您的需要。在Java16位(而不是8位)中,字符不值钱,而char[]是一个单独的对象,与C语言不同。
简而言之,您可以编写一个库,它可以在不接触握手类的情况下读取数据。只有您才能决定这是否比在握手类中添加一两个方法更容易。
发布于 2011-08-01 07:34:54
别那么做!我迟早会分手的。使用一些二进制序列化格式,如Hessian格式,它同时支持java和C++ (我不知道在普通C上有什么工作)
还请记住,C不强制int或long的大小,它们依赖于平台。因此,如果您必须使用C,并且您被迫编写自己的库,请非常小心。
https://stackoverflow.com/questions/6899943
复制