Mercurial > hg > Papers > 2011 > yuu-jssst
changeset 9:23c47b5a8fea
merge
author | Yu Taninari <you@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 08 Aug 2011 19:43:25 +0900 |
parents | 7048cf0cf759 (current diff) af7ce21f944a (diff) |
children | 8adf2865dee4 |
files | yuu-jssst.pdf yuu-jssst.tex |
diffstat | 2 files changed, 37 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/yuu-jssst.tex Mon Aug 08 19:42:36 2011 +0900 +++ b/yuu-jssst.tex Mon Aug 08 19:43:25 2011 +0900 @@ -116,6 +116,43 @@ \end{figure} +\section{java.util.zip.deflaterのバグ} +VNCで扱うRfb Protocolには、使えるエンコーディングのタイプとしてZRLE(Zlib Run-Length Encoding)がある。 +ZRLEはZlib圧縮されたデータを内包する。 +deflaterはプリセット辞書をもち、Zlib圧縮されたデータはその辞書を用いて解凍が行われる。 +辞書はで更新されることもあるのでZlib圧縮されたデータを解凍する為には辞書のデータも受け取る必要がある。 +しかし、JavaにはこのZlibの辞書を相手へ書きだす(flush)する機能が無い。 +元々のZlibの規約にはこの辞書をflushする機能があったがJavaには実装されていなかった。 +これはJava.util.zip.deflaterのバグである。 + + +\section{ZRLEE} +そこで、Top ProxyがZRLE(Zlib)で受け取ったデータをunzipし、データをzipし直して最後にfinish() +をいれることで初めからデータを読んでいなくても解凍を行えるようにした。 +このエンコードはZRLEEエンコードと定義した。 +一度ZRLEEエンコードに変換してしまえば、そのデータをそのまま流すだけで良い。 +よって変換はTop Proxyが行う一回だけですむ。 +ただし、deflaterでは前回までの通信で得た辞書をクリアしないといけないため、Client側では毎回 +deflaterは新しいものを使うことになる。 +ZRLEEはクライアント側が対応していなければならないという問題がある。 + + +\section{ZRLEとZRLEEのデータ圧縮率の比較} + + + + +\begin{figure}[tb] +\begin{center} +\scalebox{0.5}{\includegraphics{fig/compare_encoding.eps}} +\end{center} +\caption{ + +} +\label{figure:splaying} +\end{figure} + +