java.exe -Djava.security.policy=StreamRelay.policy -jar StreamRelay.jar
⇔
StreamRelay.bat
圧縮コマンドの代替
圧縮コマンドは、入力ファイル→(圧縮された)出力ファイルなので、
「local」の入力ソース(実体)にファイル、「remote」の出力ソース(実体)に圧縮ファイルとすればいい
データの方向は、「local」から「remote」なので「Request」。
圧縮は、データを加工することになるので、ストリームの方向は Write方向
よって「remote」の「Request」に、圧縮処理を指定すればいい
つまり、アルゴリズムとして gzip を選択する場合は、
入力ソース(実体)と、出力ソース(実体)を↓のように指定する
-LocalInputFile a.txt -RemoteOutputFile a.txt.gz
そして、「remote」の「request」方向に圧縮と↓のように指定する
-RemoteRequestGZIPCommpress
よって、gzip圧縮
gzip.exe a.txt
⇔
java.exe -Djava.security.policy=StreamRelay.policy -jar StreamRelay.jar -LocalPort 0 -RemotePort 0 -LocalInputFile a.txt -RemoteOutputFile a.txt.gz -RemoteRequestGZIPCommpress
伸張コマンドの代替
伸張コマンドは、(圧縮された)入力ファイル→(伸張された)出力ファイルなので、
「local」の入力ソース(実体)に圧縮ファイル、「remote」の出力ソース(実体)に結果ファイルとすればいい
データの方向は、「local」から「remote」なので「Request」。
伸張は、加工されたデータを元に戻すことになるので、ストリームの方法は Read方向
よって「local」の「Request」に、伸張処理を指定すればいい
つまり、アルゴリズムとして gzip を選択する場合は、
入力ソース(実体)と、出力ソース(実体)を↓のように指定する
-LocalInputFile a.txt.gz -RemoteOutputFile a.txt.out
そして、「local」の「request」方向に伸張と↓のように指定する
-LocalRequestGZIPCommpress
よって、gzip伸張
gzip.exe -d a.txt
⇔
java.exe -Djava.security.policy=StreamRelay.policy -jar StreamRelay.jar -LocalPort 0 -RemotePort 0 -LocalInputFile a.txt.gz -RemoteOutputFile a.txt.out -LocalRequestGZIPCommpress
圧縮/伸張アルゴリズムの一覧とリアルタイム性
ver6.4
- deflate
- GZIP
- BZIP
- Xz
- Pack200
- LZ4
- ZLIB
ZLIBは JDK7 以降の java.util.zip.Deflater.SYNC_FLUSH なので、通信のリアルタイム圧縮に使えると思う
圧縮/伸張アルゴリズムの一覧とリアルタイム性(ver8.4以降)
ver8.4以降では、「SYNC_FLUSH」オプションに仕様変更した。
-RemoteRequestGZIPCommpress=SYNC_FLUSH
みたいな感じ。
圧縮/伸張アルゴリズム(Zlib/Deflate/Gzip)(ver8.4以降)
ver8.4以降、Zlib/Deflate/Gzip を厳密にした。