Java で分散アプリケーションを作成しようとしていますが、作成中のプログラムは VB6 に相当するものを置き換えています。使用されるデータ ファイルは、VB6 の put メソッドを使用して記述されたバイナリ データを含むライブ ファイルであり、いくつかのアプリケーションで常に使用されています。
レコード全体 (160 バイト) をバイト配列 buf に読み込むことで、ファイルからテキストを正常に取得できました。次に、次の行を使用してテキスト フィールドを抽出します
new String(Arrays.copyOfRange(buf, 15, 40), "ISO-8859-1");
また、VB6 データ型の Boolean、Double、Integer、Long、Single を抽出する必要があります。最終的にはおそらくdatetimeも必要になるでしょうが、最初の段階では必要ありません。ダブルスを行うには、エンディアンが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 ビットを超えてシフトしようとすると、Java が二重に文句を言います。これはもちろん、56 を行うために必要です。
これに関する任意の助けをいただければ幸いです