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シリアライザーが行うものとはまったく異なります。ストリームの形式を知って、一度に1バイトを手動で逆シリアル化する必要があります。

たとえばint、.NETでをシリアル化すると、7ビットでエンコードされた値がシリアル化されます。カスタムタイプをでシリアル化するとBinaryFormatter、ストリームにタイプの厳密な名前が含まれます。これは、Javaが行うこととは明らかに異なります。

Javaおよび.NETで動作するサードパーティのシリアライザー/デシリアライザーを検討することをお勧めします。例:http://woxserializer.sourceforge.net/

于 2012-09-20T00:50:20.943 に答える