2012-09-20 30 views
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); 
+2

确切地说,你会得到什么错误?什么是完整的例外? –

+0

我会看看这个任务的协议缓冲区。提供Java和.NET。 – weismat

回答

1

什么是Java序列将是完全不同的而不是内置的.NET序列化器所做的。您必须知道流的格式,并且需要手动反序列化一个字节。

E.g.如果您在.NET中序列化一个int,它将序列化一个7位编码值。如果您使用BinaryFormatter序列化自定义类型,它将在流中包含该类型的强名称 - 显然不是Java会执行的操作。

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