Это, как указывали другие авторы, вплоть до порядка байтов.
Java DataInputStream ожидает, что данные будут big-endian (сетевой порядок байтов). Судя по документации Mono (для эквивалентов, таких как BinaryWriter ), C # стремится к младшему порядку (по умолчанию для Win32 / x86).
Итак, когда вы используете стандартную библиотеку классов для преобразования 32-битного целого числа '1' в байты, они дают разные результаты:
//byte hex values
Java: 00 00 00 01
C#: 01 00 00 00
Вы можете изменить способ написания целых в C #:
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);
}
}
EDIT:
Более безопасный способ сделать это будет:
private static void WriteToNetwork(System.IO.BinaryWriter stream, int n) {
n = System.Net.IPAddress.HostToNetworkOrder(n);
stream.Write(n);
}