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
Binary file yuu-jssst.pdf has changed
--- 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}
+
+