LoginSignup
0
0

More than 3 years have passed since last update.

圧縮コマンドの代替としての StreamRelay.NET.exe

Last updated at Posted at 2017-05-24

圧縮コマンドの代替

圧縮コマンドは、入力ファイル→(圧縮された)出力ファイルなので、
「local」の入力ソース(実体)にファイル、「remote」の出力ソース(実体)に圧縮ファイルとすればいい。
そして、圧縮などのデータ加工処理は、netstreamスキーム・プロキシのオプションとして実装している。
よって、圧縮時は、出力側のストリームに圧縮指定をすればいい。

つまり、アルゴリズムとして gzip を選択する場合は、

入力ソース(実体)と、出力ソース(実体)を↓のように指定する
-LocalInputFile a.txt -RemoteOutputFile a.txt.gz

そして、プロキシオプションを↓のように指定する
-RemoteProxy netstream:///?gzipCompress

よって、gzip圧縮
gzip.exe a.txt

StreamRelay.NET.exe -LocalPort 0 -RemotePort 0 -LocalInputFile a.txt -RemoteOutputFile a.txt.gz -RemoteProxy netstream:///?gzipCompress


伸張コマンドの代替

伸張コマンドは、(圧縮された)入力ファイル→(伸張された)出力ファイルなので、
「local」の入力ソース(実体)に圧縮ファイル、「remote」の出力ソース(実体)に結果ファイルとすればいい。
そして、圧縮などのデータ加工処理は、netstreamスキーム・プロキシのオプションとして実装している。
よって、伸張時は、入力側のストリームに伸張指定をすればいい。

つまり、アルゴリズムとして gzip を選択する場合は、

入力ソース(実体)と、出力ソース(実体)を↓のように指定する
-LocalInputFile a.txt -RemoteOutputFile a.txt.gz

そして、プロキシオプションを↓のように指定する
-LocalProxy netstream:///?gzipDeCompress

よって、gzip伸張
gzip.exe -d a.txt

StreamRelay.NET.exe -LocalPort 0 -RemotePort 0 -LocalInputFile a.txt.gz -RemoteOutputFile a.txt.out -LocalProxy netstream:///?gzipDeCompress

圧縮/伸張アルゴリズムの一覧

StreamRelay.NET.exe -ListFilter

StreamRelay.NET.exe/StreamRelay.NET.x86.exe に直接実装
Plugin.BaseFilterStream.dll
  • BinHexdecompress と BinHexcompress (BinHEX 符号化用の簡易的な圧縮アルゴリズム)
Plugin.7zip.dll と SevenZipSharp.dll
  • LZMADeCompress と LZMACompress[=UseTempFile]
Plugin.BouncyCastle.Crypto.dll と BouncyCastle.Crypto.dll
  • BC_Bzip2DeCompress と BC_Bzip2Compress
  • BC_DeflateDeCompress と BC_DeflateCompress
Plugin.CSharpCode.SharpZipLib.dll と SevenZipSharp.dll
  • SZ_BZip2DeCompress とSZ_BZip2Compress
  • SZ_GZipDeCompress と SZ_GZipCompress
Plugin.LZ4.dll と LZ4.dll
  • LZ4DeCompress と LZ4Compress
Plugin.Snappy.dll と SnappyPI.dll/SnappyDL.x64.dll/SnappyDL.x86.dll
  • SnappyDeCompress[=UseTempFile] と SnappyCompress[=UseTempFile]
Plugin.xz.dll と XZ.NET.dll/liblzma.dll/liblzma64.dll
  • XZDeCompress と XZCompress
Plugin.ZstdNet.dll と ZstdNet.dll/zstdlib_x64.dll/zstdlib_x86.dll
  • ZstdDeCompress[=UseTempFile] と ZstdCompress[=UseTempFile]
Plugin.Brotli.dll と Brotli.NET.dll/brotli64.dll/brotli32.dll
  • BrotliDeCompress と BrotliCompress
Plugin.zlib.NET.dll と zlib.NET.dll
  • zlibDeCompress と zlibCompress
    • SYNC_FLUSHなので、リアルタイム圧縮に使えると思う

圧縮/伸張アルゴリズムのリアルタイム性

ver2.3.1.0 現在、リアルタイム性のあるアルゴリズムはなくて、基本的に全データを受信してから圧縮/伸張処理を実施するので、ソースがファイルなど起動時に全データが存在するような場合には有効だが、ソースが通信のような実行しながら入力データが生成されるようなタイプには向かないだろう。

ver3.5.0.0 で zlib.NET.dll を同梱し、そのプラグインラッパPlugin.zlib.NET.dllを同梱した。これはzlibのSYNC_FLUSHモードなので、リアルタイム圧縮として使えるはず(zlibCompressとzlibDeConpress)。

zlibCompress=SYNC_FLUSH

みたいな感じ。

ver3.5.0.0 では BouncyCastle/C# 版でもリアルタイム圧縮ができることが分かったので、それを実装した。

BC_DeflateCompress=SYNC_FLUSH

みたいな感じ。

圧縮/伸張アルゴリズム(Zlib/Deflate/Gzip)(ver3.5.0.0以降)

ver3.5.0.0以降、Zlib/Deflate/Gzip を厳密にした。


目次へ戻る

目次というか最初の一歩

0
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
0
0