如何从不是从ObjectOutputStream创建的byte []重建对象?

时间:2013-11-14 10:29:59

标签: java

我需要从byte[]重建客户端上的对象,该InputStream存储来自{{1}}(TCP / IP)的字节。服务器在C中,结构以字节形式发送。我必须从这些字节序列中重建对象。

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

2 个答案:

答案 0 :(得分:2)

  

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

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

可以通过反射完成所有这些操作,可能使用注释来指定字段序列化的顺序等。但这可能是很多代码要写 - 除非你已经有很多不同类型的反序列化,它可能是更多代码 - 而且更多复杂的代码 - 而不是“愚蠢但直截了当”的方法。

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

答案 1 :(得分:0)

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