В Java Обычной практикой является чтение/запись отдельно каждой переменной из/в DataInputStream/DataOutputStream. Чтобы читать/писать целую структуру, создаем методы writeTo(DataOutoutStream data), readFrom(DataInputStream data) и пишем туда все элементы структуры, например
public class SomeStruct {
public int i1;
public int i2;
public void writeTo(DataOutputStream data) {
data.writeInt(i1);
data.writeInt(i2);
}
public void readFrom(DataInputStream data) {
i1 = data.readInt();
i2 = data.readInt();
}
}
Но из-за того, что запись производится в сишном коде, могут возникнуть проблемы. Дело в том, что существует два варианта
порядка байтов. Какой конкретно попадется вам, зависит от платформы. На x86 используется little-endian. Но при чтении из DataInputStream используется big endian. Да и вообще, при передаче по сети принято использовать именно big endian. Так что при записи придется разворачивать байты. Но если очень припрет - можно и при чтении. Например, порядок байтов типа int можно изменить так
Integer.reverseBytes(i1);