gpt4 book ai didi

java - Netty 编码/解码 Java 对象

转载 作者:行者123 更新时间:2023-12-02 05:13:01 25 4
gpt4 key购买 nike

我使用的是 Netty 3.9。我有一个简单的客户端服务器设置,是从 http://en.wikipedia.org/wiki/Netty_%28software%29#Netty_TCP_Example 获得的。 。我扩展了示例以将 Java 搜索计划对象从客户端发送到服务器

搜索计划对象是第三方对象,具有序列化和反序列化方法。序列化将对象写入 byte[] 数组。我的客户端管道工厂如下所示:

this.bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
@Override
public ChannelPipeline getPipeline() throws Exception {
return Channels.pipeline(
new StringDecoder(CharsetUtil.UTF_8),
new StringEncoder(CharsetUtil.UTF_8),
new DelimiterBasedFrameDecoder(
ALLOWED_CHARACTER_BUFFER_SIZE, Delimiters
.lineDelimiter()),

/* We also add our Clients own ChannelHandler. */
new ClientChannelHandler());
}
});

我认为 StringDecoder 和 StringEncoder 不正确。我想我需要某种我没有看到的 ByteEncoder/Decoder。我需要写这些吗?我尝试将此代码转换为客户端上的字符串

 byte[] byteVersion = searchPlanRepo.serialize(missionNum);  // serialize the search plan
searchPlanStr = new String(byteVersion, StandardCharsets.UTF_8);

但是在服务器上,无论我如何“反序列化”对象,我都会失败。我不断收到错误消息:

“java.lang.ClassCastException:java.lang.String无法转换为payload.mission.SearchPlanType”

我的问题:

  1. 我需要自定义字节编码器/解码器吗?有例子吗?
  2. 序列化看起来很简单:字节数组到字符串,但从字符串到字节数组的反序列化不起作用。我确信我错过了一些东西。谁能给我指出正确的方向吗?

感谢您花时间阅读本文。 :)

菲尔

最佳答案

您可能会查看序列化编解码器:

http://netty.io/3.9/api/org/jboss/netty/handler/codec/serialization/package-summary.html

至于相关示例:

https://github.com/netty/netty/tree/3.9/src/main/java/org/jboss/netty/example/objectecho

它们说明了如何序列化/反序列化对象。当然如果更具体的话你也可以编写自己的编解码器。

关于java - Netty 编码/解码 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27196185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com