【发布时间】:2012-07-05 14:13:30
【问题描述】:
我正在尝试用 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个double,此时的输出是:
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 库但我找不到。
-
我很乐意提供数据文件的样本,但由于它主要是空值和二进制文件,因此不适合发布。如果有地方可以分享二进制数据,请告诉我
标签: java vb6 vb6-migration random-access