Spring 集成 IP - 在通过套接字的消息末尾省略回车 return (\r\n)
Spring integration IP - omit carriage return (\r\n) at the end of message through sockets
当我将字节数组发送到响应通道时,我希望只将该字节数组发送到套接字。比如在spring整合ip.
@ServiceActivator(inputChannel = "serviceChannel")
public byte[] service(byte[] byteArray) {
return new byte[]{0,2,1,0};
}
我希望它能发送
00, 02, 01, 00
但是!这还将向流发送两个额外的字节
00, 02, 01, 00 , 0D, 0A
消息结束。我不想发送那些字节,即我想省略它们。如何实现?
我怀疑这与套接字如何解释消息有关,但无论我如何尝试,我都没有找到发生这种情况的地方。
upd:我发现了问题:Spring 在我的配置中使用了 class ByteArrayCrLfSerializer 但我需要使用 ByteArrayRawSerializer。我该怎么做?
见the Spring Integration documentation about serializers/deserializers。
您通常需要某种方式来划分流中的多条消息。如果数据本身包含此类信息,您可以使用 ByteArrayRawSerializer
,这将不添加任何字符。
如果您使用 XML 配置,请使用 serializer="raw"
,其中 raw 是 class ByteArrayRawSerializer。如果您使用 java 配置,只需在 @Bean
.
中设置序列化程序
如果您需要使用 Spring 集成来解码此类消息(并且通过套接字发送的消息不止一个),您将需要一个自定义反序列化器。
当我将字节数组发送到响应通道时,我希望只将该字节数组发送到套接字。比如在spring整合ip.
@ServiceActivator(inputChannel = "serviceChannel")
public byte[] service(byte[] byteArray) {
return new byte[]{0,2,1,0};
}
我希望它能发送
00, 02, 01, 00
但是!这还将向流发送两个额外的字节
00, 02, 01, 00 , 0D, 0A
消息结束。我不想发送那些字节,即我想省略它们。如何实现?
我怀疑这与套接字如何解释消息有关,但无论我如何尝试,我都没有找到发生这种情况的地方。
upd:我发现了问题:Spring 在我的配置中使用了 class ByteArrayCrLfSerializer 但我需要使用 ByteArrayRawSerializer。我该怎么做?
见the Spring Integration documentation about serializers/deserializers。
您通常需要某种方式来划分流中的多条消息。如果数据本身包含此类信息,您可以使用 ByteArrayRawSerializer
,这将不添加任何字符。
如果您使用 XML 配置,请使用 serializer="raw"
,其中 raw 是 class ByteArrayRawSerializer。如果您使用 java 配置,只需在 @Bean
.
如果您需要使用 Spring 集成来解码此类消息(并且通过套接字发送的消息不止一个),您将需要一个自定义反序列化器。