圧縮コマンドの代替
圧縮コマンドは、入力ファイル→(圧縮された)出力ファイルなので、
「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 に直接実装
-
- gzipCompress と gzipDeCompress (System.IO.Compression.GZipStream クラス)
- deflateCompress と deflateDeCompress (System.IO.Compression.DeflateStream クラス)
- 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なので、リアルタイム圧縮に使えると思う
- zlibDeCompress と zlibCompress
圧縮/伸張アルゴリズムのリアルタイム性
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 を厳密にした。