Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
反序列化Java中C#生成的RabbitMQ消息_Java_C#_Serialization_Memorystream_Binaryformatter - Fatal编程技术网

反序列化Java中C#生成的RabbitMQ消息

反序列化Java中C#生成的RabbitMQ消息,java,c#,serialization,memorystream,binaryformatter,Java,C#,Serialization,Memorystream,Binaryformatter,我在C#中有一个RabbitMQ数据服务,“fout”一些消息。Subscriber/client是用Java编写的。我可以接收消息,我知道如何在C#中反序列化,但我不知道如何将消息反序列化到对象。在Java中 C#序列化: byte[] message; BinaryFormatter bf = new BinaryFormatter(); using (var ms = new MemoryStream()) { bf.Serialize(ms, updateMessage);

我在C#中有一个RabbitMQ数据服务,“fout”一些消息。Subscriber/client是用Java编写的。我可以接收消息,我知道如何在C#中反序列化,但我不知道如何将消息反序列化到对象。在Java中

C#序列化:

byte[] message;
BinaryFormatter bf = new BinaryFormatter();
using (var ms = new MemoryStream())
{
    bf.Serialize(ms, updateMessage);
    message = ms.ToArray();
}
C#反序列化:

MyObject message = null;
using (var memStream = new MemoryStream())
{
    var binForm = new BinaryFormatter();
    memStream.Write(body, 0, body.Length);
    memStream.Seek(0, SeekOrigin.Begin);
    message = (MyObject)binForm.Deserialize(memStream);
}
Java接收器:

@RabbitListener(queues = queueName)
public void receive(??? message ) {
    // deserailize message right here
    // btw, I do not know what type of received message should be initialized.
}

反序列化使用.NET内置二进制序列化程序序列化的Java对象不是不可能的(您必须自己实现反序列化程序)

最简单的选择是使用基于文本的序列化选项,如JSON和XML。关于如何在C#和Java中实现这一点,有很多教程


如果您需要使用二进制格式,可以选择Google的protocol buffers或apache thrift。

我不明白您为什么首先要序列化。RabbitMQ不是为您处理所有这些吗?我认为,
BinaryFormatter
并不是真正打算在.NET领域之外使用的。默认的RabbitMQ编码是
var body=Encoding.UTF8.GetBytes(message),但我使用不同的方式对消息进行编码。我无法更改发布端(序列化程序),所以我唯一能做的就是尝试将内存流的二进制数组反序列化为对象。你知道怎么做吗?我的意思是如何实现自己的序列化程序。谢谢。我没有找到在二进制序列化程序中反序列化.NET构建的方法。我将消息的格式从memoryStream的二进制更改为string。而且在Java中很容易处理UTF-8的二进制数组。谢谢你的回答。