我正在尝试用 Java 编写分布式应用程序,但是我正在编写的程序正在替换 VB6 等效程序。使用的数据文件是包含使用 VB6 put 方法编写的二进制数据的实时文件,并且经常被多个应用程序使用。
通过将整条记录(160 字节)读入字节数组 buf,我已成功从文件中检索到文本。然后使用以下行提取文本字段
new String(Arrays.copyOfRange(buf, 15, 40), "ISO-8859-1");
我还需要提取 VB6 数据类型 Boolean、Double、Integer、Long 和 Single。最终我可能也需要日期时间,但第一阶段不需要。要进行双打,我知道在 VB6 中字节序是小字节序而不是大字节序,所以我有以下功能
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. 我无法合理地将任何更改写回文件,就好像我正在阅读有边距或错误,那么我可能会以相同的误差边距写作。我也尝试过手动位移,但是如果我尝试位移超过 31 位,我当然需要这样做才能执行 56 位,但是对于双 Java 会抱怨。
对此的任何帮助将不胜感激