他のポスターが指摘しているように、それはエンディアンにまで及びます。
Java DataInputStreamは、データがビッグ エンディアン(ネットワーク バイト オーダー) であることを想定しています。Mono のドキュメント ( BinaryWriterのような同等のもの) から判断すると、C# はリトル エンディアン (Win32/x86 のデフォルト) になる傾向があります。
したがって、標準クラス ライブラリを使用して 32 ビットの int '1' をバイトに変更すると、異なる結果が生成されます。
//byte hex values
Java: 00 00 00 01
C#: 01 00 00 00
C# で int を記述する方法を変更できます。
private static void WriteInt(Stream stream, int n) {
for(int i=3; i>=0; i--)
{
int shift = i * 8; //bits to shift
byte b = (byte) (n >> shift);
stream.WriteByte(b);
}
}
編集:
これを行うより安全な方法は次のとおりです。
private static void WriteToNetwork(System.IO.BinaryWriter stream, int n) {
n = System.Net.IPAddress.HostToNetworkOrder(n);
stream.Write(n);
}