Я пытаюсь написать распределенное приложение на Java, однако программа, которую я пишу, заменяет эквивалент VB6. Используемые файлы данных - это живые файлы, содержащие двоичные данные, записанные с использованием методов put VB6, которые постоянно используются несколькими приложениями.
Я успешно извлек текст из файла, прочитав всю запись (160 байт) в массив байтов buf. Затем, используя следующую строку, извлеките текстовые поля
new String(Arrays.copyOfRange(buf, 15, 40), "ISO-8859-1");
Мне также нужно извлечь типы данных VB6 Boolean, Double, Integer, Long и Single. В конце концов, мне, вероятно, понадобится и datetime, но не на первом этапе. Чтобы делать удвоения, я знаю, что порядок байтов в VB6 является Little endian, а не big, поэтому у меня есть следующая функция
public static double toDouble(byte[] bytes) {
return ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN).getDouble();
}
Первые несколько полей данных представляют собой строки, затем 2 двойных, на данный момент вывод:
Barcode: 1
Dept Code: 18
Description: MISC NON VAT
Trade Price: 0.0
Retail Price: 0.009999999776482582
Как видите, первые 3 логичны и соответствуют содержимому файла данных. Торговая цена должна быть 0,0, так что это нормально, но розничная цена должна быть 0,01, что было бы правильно, если бы я округлил ее, но: A. Мне неудобно округлять цену и информацию о НДС, и B. Я не могу разумно записать какие-либо изменения обратно в файл, как будто я читаю с погрешностью или погрешностью, тогда я, вероятно, буду писать с такой же погрешностью. Я также пробовал вручную сдвиг битов, но для двойного Java жалуется, если я пытаюсь сдвинуть более 31 бита, что, конечно, мне нужно, чтобы сделать 56.
Любая помощь по этому поводу будет очень признательна