0

我在从客户端接收用 Java 编写的对象时遇到问题。我 100% 确定我的客户端代码,这很好。但是当我尝试从我的 C# 异步服务器接收几个错误时,我认为这是因为我真的不知道如何获取它的流

int iRx = socketData.m_currentSocket.EndReceive(asyn);
byte[] receivedData = socketData.dataBuffer;
MemoryStream memStream = new MemoryStream();
BinaryFormatter binForm = new BinaryFormatter();
memStream.Write(receivedData, 0, receivedData.Length);
memStream.Seek(0, SeekOrigin.Begin);
UserData usdata = (UserData)binForm.Deserialize(memStream);
4

1 回答 1

1

Java 序列化的内容将与内置的 .NET 序列化程序完全不同。您必须知道流的格式并手动反序列化一个字节。

例如,如果您int在 .NET 中序列化一个,它会序列化一个 7 位编码值。如果您使用 序列化自定义类型BinaryFormatter,它会在流中包含该类型的强名称——这显然不是 Java 会做的。

您可能需要考虑在 Java 和 .NET 中工作的第三方序列化器/反序列化器。例如http://woxserializer.sourceforge.net/

于 2012-09-20T00:50:20.943 回答