0

我需要从byte[]存储来自InputStream(TCP/IP)的字节的客户端重建一个对象。服务器使用 C 语言,结构以字节形式发送。我必须从这些字节序列中重建对象。

我可以通过读取字节块并将它们转换为我想要重建的对象的变量来做到这一点,但是这种方法很乏味,我想知道是否有简单的出路?

4

2 回答 2

2

但是这种方法很乏味,我想知道是否有简单的出路?

不是我知道的。但是,如果您发现自己多次编写相同的代码,您可能会发现,如果您提取一些辅助方法,它实际上变得非常简单。是的,您需要调用一个方法来读取每个字段值......但代码最终应该易于阅读和理解,而不是依赖任何神奇的东西。

可以通过反射来完成所有这些工作,可能使用注释来指定字段序列化的顺序等。但这可能需要编写很多代码 - 除非您有很多不同的类型要反序列化,否则可能会比“愚蠢但直接”的方法更多代码 - 更复杂的代码。

不过,我希望 C 方面的字节格式是明确规定的:如果它基本上只是转储内存中的表示,那么在面对变化时它最终会变得非常脆弱。

于 2013-11-14T10:34:11.003 回答
0

看看JNA。您将不得不挖掘一下。JNA 旨在将 C 共享库(.DLL、.so 等)映射到 Java。但它有各种帮助类和方法,可用于将内存中的 C 结构映射到类似结构的 Java 对象。我几乎 100% 确定您可以通过网络读取这些结构,将字节写入 ByteBuffer(直接或其他方式),然后在它们上映射 Java 对象。

于 2013-11-14T13:17:05.190 回答