У меня проблема с записью целого числа 4 байта в Java.
Запись длинного значения в java приводит к разным результатам на 64-битных MacOS и 32-битных Linux (Ubuntu)
ИЛИ ЖЕ
Запись в сеть 4-байтового целого без знака имеет проблему.
Следующий вызов отлично работает на моем локальном OSX
writeUInt32(999999,outputstream)
Чтение обратно дает мне 999999
Однако, когда приложение развернуто в сети, запись длинного значения приводит к некоторому другому случайному числу (я полагаю, что порядковый номер был переключен?), А чтение его дает мне другое большое число.
---------- Полный набор методов приведен ниже ---------------
public void writeUInt32(long uint32,DataOutputStream stream) throws IOException {
writeUInt16((int) (uint32 & 0xffff0000) >> 16,stream);
writeUInt16((int) uint32 & 0x0000ffff,stream);
}
public void writeUInt16(int uint16,DataOutputStream stream) throws IOException {
writeUInt8(uint16 >> 8, stream);
writeUInt8(uint16, stream);
}
public void writeUInt8(int uint8,DataOutputStream stream) throws IOException {
stream.write(uint8 & 0xFF);
}
Редактировать: чтобы добавить к путанице запись в файл и затем передачу его по сети, отправьте мне правильное значение! Поэтому, когда outputtream указывает на локальный файл, он записывает правильные значения, но когда outputtream указывает на ByteArrayOutputStream, тогда записанное длинное значение является неправильным.