changeset 6:185665b0270d

commit yuu-jssst.tex
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Mon, 08 Aug 2011 19:31:56 +0900
parents 4a40637a6592
children af7ce21f944a
files yuu-jssst.pdf yuu-jssst.tex
diffstat 2 files changed, 38 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
Binary file yuu-jssst.pdf has changed
--- a/yuu-jssst.tex	Mon Aug 08 19:06:42 2011 +0900
+++ b/yuu-jssst.tex	Mon Aug 08 19:31:56 2011 +0900
@@ -125,6 +125,44 @@
 \end{figure}
 
 
+\section{java.util.zip.deflaterのバグ}
+VNCで扱うRfb Protocolには、使えるエンコーディングのタイプとしてZRLEエンコードがある。
+ZRLEエンコードはZlib圧縮されたデータを内包する。
+deflaterはプリセット辞書をもち、Zlib圧縮されたデータはその辞書を用いて解凍が行われる。
+辞書はで更新されることもあるのでZlib圧縮されたデータを解凍する為には辞書のデータも受け取る必要がある。
+しかし、JavaにはこのZlibの辞書を相手へ書きだす(flush)する機能が無い。
+元々のZlibの規約にはこの辞書をflushする機能があったがJavaには実装されていなかった。
+これはJava。util。zop。deflaterのバグである。
+
+
+\section{ZRLEEエンコード}
+そこで、Top ProxyがZRLE(Zlib)で受け取ったデータをunzipし、データをzipし直して最後にfinish()
+をいれることで初めからデータを読んでいなくても解凍を行えるようにした。
+このエンコードはZRLEEエンコードと定義した。
+一度ZRLEEエンコードに変換してしまえば、そのデータをそのまま流すだけで良い。
+よって変換は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}
+
+