类字段到字节数组或流的Java转换

d8tt03nd  于 2023-03-11  发布在  Java
关注(0)|答案(2)|浏览(161)

我有一个Java程序,需要输出一个字节数组来表示类示例的原始字段。ObjectI/OStreams不适合,因为我只需要原始数据,因为这是数据必须通过网络收发的方式。如果不简单地编写一个手动转换每个字段的方法,我怎么能做到这一点呢?(有几百个,这些可能会改变)

monwx1rj

monwx1rj1#

用Jackson数据绑定对象Map器将对象序列化为json(一个字符串),对得到的字符串执行.getBytes()操作,得到byte[]

4nkexdtk

4nkexdtk2#

出现了几个问题:

  • 目标系统是什么?
  • 如何按照字节顺序处理多字节整数值?
  • 浮点值在存储格式方面是如何处理的?
  • 当涉及到编码(UTF-8等)时,文本是如何处理的?

我真的建议您使用类似Google Protocol BuffersApache Avro的东西。两者都有不同的方法,而且有更多的替代方案。Protocol Buffers定义数据结构并为其编译代码(在通信的“双方”),Avro发送带有数据的模式,并可以“动态”写入和读取数据。
如果这不可能,您看过java.io.DataOutputStream吗?
也许您还可以使用java.nio包中的内容,如ByteBufferCharBufferDoubleBuffer等,这样做的好处是java.nio还提供了适合这些缓冲区的异步网络操作。
如果没有其他方法可以帮助你,你必须使用Java Reflection,用Class.getFields()Field.getByte(Object)以及java.reflect中的其他类似方法读取对象的字段,但是这是一个非常丑陋的解决方案,你可能也要为此在性能和可维护性方面付出代价。

相关问题