1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

HULFT バイナリファイル送信時の圧縮単位における推奨値

Last updated at Posted at 2020-11-23

はじめに

HULFTの送信定義において、バイナリファイルを圧縮する場合、圧縮単位という設定値を設定しないといけないが1、設定内容によっては送信エラーが発生する場合がある。

私が確認したのはHULFTのバージョン8でしたが、7でも同様かと思われます。

HULFTの圧縮

HULFTの圧縮方式には、

  • 縦圧縮
  • 縦横圧縮
  • DEFLATE圧縮

の3種類があるが、DEFLATE圧縮については、HULFTのバージョン8以上でないと使用できない。

バージョン7との伝送で圧縮するためには、縦圧縮か横圧縮の設定が必要。

縦圧縮、横圧縮については、レコード単位に圧縮する処理なので、バイナリ伝送の場合はどのバイト長を1レコードとして扱うかを指定しないといけない。

その指定するパラメータが圧縮単位。

圧縮単位

圧縮単位は、0~32760 の範囲で設定可能。
マニュアルによると、
https://www.hulft.com/help/ja-jp/HULFT-V8/UX-OPE/Content/HULFT_OPE_UNIX/HULFTSysMngmntInfo/SndMngmntInfo.htm

値が大きいほど、高速に処理を行います(ただし、メモリを消費します)。

とのこと。

なので、圧縮効率を最大化するため、最大値(32760)を設定設定するのが良いのではと判断してしまう。

32Kバイトは大きな値ではないし、メモリ消費についても、最近の機器スペックからすると桁が違うので
問題になることはほぼないと考えられるので。

送信可能な最大レコード長

一方、HULFTには送信可能な最大レコード長があり、そのサイズは 32768 となっている(改行含む)。

圧縮においては、圧縮されたデータに制御情報が付加されて転送されるが、圧縮の効果がほぼなかった場合は、制御情報が付加されることで、元データよりもサイズが大きくなる場合がある。

そのため、圧縮単位を設定可能な最大値のような大きな値に設定していると、圧縮データによっては最大レコード長超過となり以下のエラーが発生する。

231 The data length of one record exceeds the maximum value.
内容)
1レコードのデータ長が最大値を超えました。

対処)
圧縮により、1レコードの最大値32768バイトを超えたと考えられます。圧縮を行わないで配信を再実行してください。

推奨値

圧縮単位については、メーカの推奨値(圧縮データの圧縮効率がどれだけ悪くとも、送信データが最大レコード長を超過することがない値の最大値)があり、以下の値となっている。

32255

そのため、バイナリ伝送で圧縮単位を設定する場合は、32255 を設定するのが推奨されている。

できれば、マニュアルにその旨記載もしくは、圧縮単位の設定可能上限を 32255 にていただけると、大変ありがたいです。

終わりに

HULFTに精通している方なら自明のことなのかもしれないですが、製品のマニュアルにはどこにも記載がないので記事にしました。

バイナリ伝送の圧縮については、ファイルそのものを事前に別途圧縮した上でHULFTでは圧縮しないでおくか、バージョン8同士であるなら DEFLATE圧縮にするのがいいのかもしれないです。

参考

  1. 正確には、縦圧縮、縦横圧縮の場合のみ。DEFLATE圧縮の場合は設定不要

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?