Читать бинарные файлы VB 5.0 с Java - PullRequest
3 голосов
/ 20 июня 2011

У меня есть двоичный файл, созданный из программы, созданной в Visual Basic 5.0. Файл просто содержит набор Long значений из мира Visual Basic. Я понял, что Long в Visual Basic 5.0 имеет размер 4 байта, но я не знаю порядок байтов.

Я попытался выполнить синтаксический анализ файла с помощью DataInputStream, используя различные методы «чтения», но, похоже, я получил «неправильные» (т.е. отрицательные) значения.

Как я могу прочитать это и правильно интерпретировать с помощью Java? Каков порядок байтов для Long в Visual Basic 5.0?

Ниже приведен код, с которым я пытаюсь работать; Я пытаюсь прочитать 2 Long s и распечатать на экране, а затем прочитать еще 2 и т. Д.

    try {
        File dbFile = new File(dbFolder + fileINA);
        FileInputStream fINA = new FileInputStream(dbFile);
        dINA = new DataInputStream(fINA);
        long counter = 0;

        while (true) {
            Integer firstAddress = dINA.readInt();
            Integer lastAddress = dINA.readInt();

            System.out.println(counter++ + ": " + firstAddress + " " + lastAddress);
        }
    }
    catch(IOException e) {
        System.out.println ( "IO Exception =: " + e );
    }

1 Ответ

5 голосов
/ 20 июня 2011

Поскольку VB работает на процессорах x86, его типы данных имеют младший порядок. Также обратите внимание, что Long в VB имеет тот же размер, что и int в Java.

Я бы попробовал что-то вроде этого:

int vbLong = ins.readUnsignedByte() +
             (ins.readUnsignedByte() << 8) +
             (ins.readUnsignedByte() << 16) +
             (ins.readUnsignedByte() << 24);
...