我已经做了一个question to send/receive from netty server to flutter client,但是我已经成功创建了连接。但是,我的新问题是从Netty服务器发送的数据是一个字节数组(无论如何,我仍然相信),我似乎无法弄清楚如何将字节数组解码为对象。我仍然想回答我原来的问题,因为答案可能是比我现在做的更好的方法。从解密从Netty服务器(code here)发送的字节数组并编码字节数组之后,我将如何做? (我正在使用ObjectEncoder和ObjectDecoder进行网络结算)

最佳答案

netty具有用于序列化数据的不同编解码器。默认的ObjectEncoder似乎是对包括Java类uid的 header 进行序列化,然后附加普通的Java对象序列化。您不太可能想要实现与Dart中的相对应的对象。

您需要找到可以在netty和Dart中生成/解析的数据表示形式。在一种极端情况下,您可以使用netty ByteBuf。相当清楚的是,netty是如何序列化为ByteBuf的,您可以使用ByteData在Dart末尾模拟它。在另一个极端,您可能几乎不使用netty的序列化。您可以将Java对象编码为utf8 JSON字符串,发送该字符串,然后在dart端只需解码utf8和json。当然,这不能给您紧凑的电线表示。如果您想要Java和Dart中可用的紧凑表示形式,请考虑使用protobuf。

如果要使两种使用两种不同语言的系统进行互操作,则需要负责它们如何进行序列化/反序列化。使用netty的ObjectEncoder似乎是一个坏主意,因为它过于依赖Java的内部对象序列化,而在Dart端则没有。

09-16 03:55