Java читает без знака int, сохраняет и записывает обратно - PullRequest
1 голос
/ 22 сентября 2011

Мне нужно прочитать беззнаковое целое из файла быстрого времени и записать его обратно в другой файл быстрого времени.

В настоящее время я читаю беззнаковое целое в Long, но во время его записи мне так и не удалось записать точное число обратно в 4 байта как беззнаковое целое.Long имеет правильное значение, которое мне нужно написать обратно.(например, 3289763894 или 370500) Я не могу даже прочитать запись с числом меньше Integer.MAX_VALUE (например, 2997).

Я использую следующие методы для записи значения обратно

 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);
    }

Любая помощь будет оценена.

Ответы [ 2 ]

4 голосов
/ 22 сентября 2011

Просто напишите свою длинную приведенную к int. Я проверил:


PipedOutputStream pipeOut = new PipedOutputStream ();
PipedInputStream pipeIn = new PipedInputStream (pipeOut);
DataOutputStream os = new DataOutputStream (pipeOut);

long uInt = 0xff1ffffdL;

System.out.println ("" + uInt + " vs " + ((int) uInt));
os.writeInt ((int) uInt);
for (int i = 0; i < 4; i++) System.out.println (pipeIn.read ());

uInt = 0x000ffffdL;
System.out.println ("" + uInt + " vs " + ((int) uInt));
os.writeInt ((int) uInt);
for (int i = 0; i < 4; i++) System.out.println (pipeIn.read ());

Вывод

4280287229 vs -14680067
255
31
255
253
1048573 vs 1048573
0
15
255
253
как ожидалось
0 голосов
/ 22 сентября 2011

Если вы хотите только прочитать, сохранить и переписать его, тогда вы можете просто использовать int. Более общий: пока вы не интерпретируете биты, вы можете просто читать, хранить и записывать их, не заботясь о предполагаемой интерпретации битов.

...