tcp - 我可以在扩展 Spring Integrations ByteArrayLengthHeaderSerializer 的类中推送消息吗?

标签 tcp spring-integration

我正在扩展 ByteArrayLengthHeaderSerializer 以返回来自 tcp 消息头的长度。问题是套接字上的第一条消息包含一个没有 header 的 8 字节 session 。在第一条消息之后,所有消息都会有一个带有长度的 header (以及其他一些字段)。 header 的前 4 个字节将始终是一个常量值。

我想读取前 4 个字节以确定我是否收到带有 header 或原始 sessionId 的消息。

如果不是 header ,那么我会推回 4 个字节并返回 8 的长度。

如果它是一个 header (前 4 个字节与常量值匹配),那么我将读取 header 的其余部分,找到 header 中的长度字段并返回该值。

此外,此应用程序可能正在使用 nio。

最佳答案

不直接;几年前,我通过编写一个使用 PushBackInputStream 的自定义反序列化器做了类似的事情。

您应该能够编写自定义反序列化器;将 IS 包装在 PushBackIS 中。查看开头并在需要时返回,然后委托(delegate)给 BALHS 以使用正确的 header 解码这些消息。

关于tcp - 我可以在扩展 Spring Integrations ByteArrayLengthHeaderSerializer 的类中推送消息吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31193708/

相关文章:

tomcat - 无法连接到具有IP地址的远程计算机

java - Spring集成MessageQueue无需轮询

java - Spring Integration - ErrorMessageExceptionTypeRouter NullPointerException - 如何修复它?

java - 将 Spring XML 上下文移至 Groovy

java - MessageChannel.send 方法什么时候返回?

c# - TCP 通信 : Send Response

tcp - 使用 libpcap 检测重传数据包

Java 简单 TCP 客户端/服务器测试卡住

tcp - 如何在 erlang gen_tcp 中同时处理一个客户端?

java - 有什么方法可以拆分通量流吗?