(57)【要約】      （修正有）【課題】旧データ列と新データ列の差分を示すデータ列を効率的に生成する。【解決手段】サーバ装置１００は、旧データ列と新データ列の両方を保持する。サーバ装置１００は、新データ列のうちの未検証データ列について、旧データ列において同一内容のデータ列が存在するか検索する。サーバ装置１００は、検索結果に応じて未検証データ列の少なくとも一部を差分単位データ列に変換する。そして、各差分単位データ列を連結することにより、旧データ列と新データ列との差分を示す差分データ列を生成する。クライアント端末２００は、サーバ装置１００から差分データ列をダウンロードする。クライアント端末２００は、保持している旧データ列とダウンロードした差分データ列を入力として復元処理を実行することにより新データ列を復元する。【選択図】図２
2008204287.tif 000002
【特許請求の範囲】
【請求項１】
旧データ列と新データ列との差分データ列を生成する方法であって、
前記旧データ列を取得するステップと、
前記新データ列を取得するステップと、
前記旧データ列の部分的な領域を示す旧目印領域を設定するステップと、
前記新データ列に検証対象位置を設定するステップと、
同一検索処理として、前記新データ列の前記検証対象位置を開始位置とする未検証データ列の少なくとも一部と内容が一致する同一データ列を前記旧データ列から検索するステップと、
前記同一検索処理の結果に基づいて、前記差分データ列の一部として、前記新データ列のうちの未検証データ列の少なくとも一部に対応する差分単位データ列を順次生成するステップと、を備え、
前記差分単位データ列を生成するステップにおいては、
前記同一データ列が前記旧データ列から検出されなければ、前記差分単位データ列として、前記未検証データ列の先頭のデータを記録して、前記検証対象位置を所定分進め、
前記同一データ列が前記旧目印領域内から検出されたときには、前記差分単位データ列として、前記同一データ列の旧目印領域内における位置と前記同一データ列の長さを記録して、前記検証対象位置を前記同一データ列の長さ分進め、
前記同一データ列が前記旧目印領域外から検出されたときには、前記同一データ列を含むように前記旧目印領域を移動させ、前記差分単位データ列として、少なくとも、前記旧目印領域の移動位置と前記同一データ列の長さを記録して、前記検証対象位置を前記同一データ列の長さ分進め、
前記新データ列において前記同一検索処理の対象となっていない未検証データ列が存在するときには、前記同一検索処理を再実行することにより、前記差分データ列を生成すること特徴とするデータ生成方法。
【請求項２】
前記差分データ列を通信回線を介して外部に送信するステップ、を更に備えることを特徴とする請求項１に記載のデータ生成方法。
【請求項３】
前記差分データ列を生成するステップにおいては、さらに、検出された前記同一データ列が所定下限長以上の可変長のデータ列であるか否かを判定し、所定下限長以上のときには、前記旧目印領域内における位置または前記旧目印領域の移動位置と、前記同一データ列の長さとを記録して、前記検証対象位置を前記同一データ列の長さ分進め、所定下限長未満のときには、前記未検証データ列の先頭のデータを記録して、前記検証対象位置を所定分進めることを特徴とする請求項１に記載のデータ生成方法。
【請求項４】
前記同一データ列を検索するステップにおいては、前記未検証データ列の少なくとも一部に対して最長一致する同一データ列を検出し、
前記差分単位データ列を生成するステップにおいては、前記未検証データ列のうち、最長一致した同一データ列と内容が一致する未検証データ列の少なくとも一部を対象として差分単位データ列を記録することを特徴とする請求項１に記載のデータ生成方法。
【請求項５】
前記差分単位データ列は、前記同一データ列の前記旧目印領域内における位置、前記同一データ列の長さおよび前記旧目印領域の移動位置のうち少なくとも一つを所定の符号変換表により所定長の符号に変換された上で記録されることを特徴とする請求項４に記載のデータ生成方法。
【請求項６】
前記同一データ列を検索するステップにおいては、前記未検証データ列の少なくとも一部に対して最長一致する同一データ列を前記旧目印領域内及び前記旧目印領域外から検出し、
前記差分単位データ列を生成するステップにおいては、前記検出した同一データ列を差分単位データ列に変換するときのデータサイズ率を算出し、最もデータサイズ率が小さくなる同一データ列を対象として差分単位データ列を記録することを特徴とする請求項４に記載のデータ生成方法。
【請求項７】
前記差分単位データ列を生成するステップにおいては、
前記同一データ列が前記旧目印領域外から検出されたときには、前記旧目印領域の始点位置が前記同一データ列の始点位置と一致するように前記旧目印領域を移動させることを特徴とする請求項１に記載のデータ生成方法。
【請求項８】
前記同一データ列は、所定上限長以下の可変長のデータ列であることを特徴とする請求項１に記載のデータ生成方法。
【請求項９】
前記差分単位データ列を生成するステップにおいては、
前記所定上限長の同一データ列が前記旧目印領域内から検出されたときには、前記差分単位データ列として、前記所定上限長分の一致を示す上限一致データを記録し、前記旧目印領域を所定量移動させることを特徴とする請求項８に記載のデータ生成方法。
【請求項１０】
前記差分単位データ列を生成するステップにおいては、
前記所定上限長の同一データ列が前記旧目印領域内から検出されたときに前記旧目印領域を所定量移動させても、前記差分単位データ列には、前記旧目印領域の移動位置を記録しないことを特徴とする請求項９に記載のデータ生成方法。
【請求項１１】
所定のハッシュ関数により、前記旧データ列に含まれる所定長のデータ列をハッシュ値に変換するステップと、
前記所定のハッシュ関数により、前記新データ列に含まれる所定長のデータ列をハッシュ値に変換するステップと、を更に備え、
前記同一データ列を検出するステップにおいては、前記未検証データ列のハッシュ値と前記旧データ列のハッシュ値を比較することにより、前記未検証データ列に対する前記同一データ列を検出することを特徴とする請求項１に記載のデータ生成方法。
【請求項１２】
旧データ列と新データ列との差分データ列を生成する方法であって、
前記旧データ列を取得するステップと、
前記新データ列を取得するステップと、
前記旧データ列の部分的な領域を示す旧目印領域を設定するステップと、
前記新データ列の部分的な領域を示す新目印領域を設定するステップと、
前記旧目印領域と前記新目印領域のいずれかを現目印領域として設定するステップと、
前記新データ列に検証対象位置を設定するステップと、
同一検索処理として、前記旧データ列と前記新データ列のうち既に生成されたデータ範囲とから、前記新データ列の前記検証対象位置を開始位置とする未検証データ列の少なくとも一部と内容が一致する同一データ列を検索するステップと、
前記同一検索処理の結果に基づいて、前記差分データ列の一部として、前記新データ列のうちの未検証データ列の少なくとも一部に対応する差分単位データ列を順次生成するステップと、を備え、
前記差分単位データ列を生成するステップにおいては、
前記同一データ列が前記旧データ列および前記新データ列のいずれからもから検出されなければ、前記差分単位データ列として、前記未検証データ列の先頭のデータを記録して、前記検証対象位置を所定分進め、
前記同一データ列が前記旧データ列から検出されたときであって、現目印領域として前記新目印領域が設定されているときには、前記旧目印領域を現目印領域に設定し、現目印領域の変更を示すスイッチデータを差分データ列の一部として記録し、
前記同一データ列が前記旧データ列の前記旧目印領域内から検出されたときには、前記差分単位データ列として、前記同一データ列の旧目印領域内における位置と前記同一データ列の長さを記録して、前記検証対象位置を前記同一データ列の長さ分進め、
前記同一データ列が前記旧データ列の前記旧目印領域外から検出されたときには、前記同一データ列を含むように前記旧目印領域を移動させ、前記未検証データ列の少なくとも一部に対応する差分単位データ列として、少なくとも、前記旧目印領域の移動位置と前記同一データ列の長さを記録して、前記検証対象位置を前記同一データ列の長さ分進め、
前記同一データ列が前記新データ列から検出されたときであって、現目印領域として前記旧目印領域が設定されているときには、前記新目印領域を現目印領域として設定し、スイッチデータを差分データ列の一部として記録し、
前記同一データ列が前記新データ列の前記新目印領域内から検出されたときには、前記差分単位データ列として、前記同一データ列の新目印領域内における位置と前記同一データ列の長さを記録して、前記検証対象位置を前記同一データ列の長さ分進め、
前記同一データ列が前記新データ列の前記新目印領域外から検出されたときには、前記同一データ列を含むように前記新目印領域を移動させ、前記未検証データ列の少なくとも一部に対応する差分単位データ列として、少なくとも、前記新目印領域の移動位置と前記同一データ列の長さを記録して、前記検証対象位置を前記同一データ列の長さ分進め、
前記新データ列において前記同一検索処理の対象となっていない未検証データ列が存在するときには、前記同一検索処理を再実行することにより、前記差分データ列を生成すること特徴とするデータ生成方法。
【請求項１３】
前記同一データ列を検索するステップにおいては、前記未検証データ列の少なくとも一部に対して最長一致する同一データ列を検出し、
前記差分単位データ列を生成するステップにおいては、前記未検証データ列のうち、最長一致した同一データ列と内容が一致する未検証データ列の少なくとも一部を対象として差分単位データ列を記録することを特徴とする請求項１２に記載のデータ生成方法。
【請求項１４】
前記差分単位データ列は、前記同一データ列の位置、前記同一データ列の長さ、前記旧目印領域の移動位置および前記新目印領域の移動位置のうち少なくとも一つを所定の符号変換表により所定長の符号に変換された上で記録されることを特徴とする請求項１３に記載のデータ生成方法。
【請求項１５】
前記同一データ列を検索するステップにおいては、未検証データ列の少なくとも一部に対して最長一致する同一データ列を前記旧目印領域内と前記旧データ列における前記旧目印領域外、前記新目印領域内、前記新データ列における前記新目印領域外のうち何れかから少なくとも一つ検出し、
前記差分単位データ列を生成するステップにおいては、前記旧目印領域内の同一データ列を差分単位データ列に変換するときのデータサイズ率、前記旧目印領域外の同一データ列を差分単位データ列に変換するときのデータサイズ率、前記新目印領域内の同一データ列を差分単位データ列に変換するときのデータサイズ率および前記新目印領域外の同一データ列を差分単位データ列に変換するときのデータサイズ率を算出し、最もデータサイズ率が小さくなる同一データ列を対象として差分単位データ列を記録することを特徴とする請求項１４に記載のデータ生成方法。
【請求項１６】
旧データ列と新データ列との差分データ列を生成する装置であって、
前記旧データ列を保持する旧データ保持部と、
前記新データ列を保持する新データ保持部と、
前記旧データ列の部分的な領域を示す旧目印領域を設定する旧目印領域設定部と、
前記新データ列に検証対象位置を設定する検証位置設定部と、
同一検索処理として、前記新データ列の前記検証対象位置を開始位置とする未検証データ列の少なくとも一部と内容が一致する同一データ列を前記旧データ列から検索する同一検索部と、
前記同一検索処理の結果に基づいて、前記差分データ列の一部として、前記新データ列のうちの未検証データ列の少なくとも一部に対応する差分単位データ列を順次生成する差分生成部と、を備え、
前記差分生成部は、
前記同一データ列が前記旧データ列から検出されなければ、前記差分単位データ列として、前記未検証データ列の先頭のデータを記録して、前記検証対象位置を所定分進め、
前記同一データ列が前記旧目印領域内から検出されたときには、前記差分単位データ列として、前記同一データ列の旧目印領域内における位置と前記同一データ列の長さを記録して、前記検証対象位置を前記同一データ列の長さ分進め、
前記同一データ列が前記旧目印領域外から検出されたときには、前記同一データ列を含むように前記旧目印領域を移動させ、前記差分単位データ列として、少なくとも、前記旧目印領域の移動後の位置と前記同一データ列の長さを記録して、前記検証対象位置を前記同一データ列の長さ分進め、
前記新データ列において前記同一検索処理の対象となっていない未検証データ列が存在するときには、前記同一検索処理を再実行することにより、前記差分データ列を生成すること特徴とするデータ生成装置。
【請求項１７】
前記差分データ列を通信回線を介して外部に送信する差分送信部、を更に備えることを特徴とする請求項１6に記載のデータ生成装置。
【請求項１８】
旧データ列と新データ列との差分データ列を生成するコンピュータプログラムであって、
前記旧データ列を保持する機能と、
前記新データ列を保持する機能と、
前記旧データ列の部分的な領域を示す旧目印領域を設定する機能と、
前記新データ列に検証対象位置を設定する機能と、
同一検索処理として、前記新データ列の前記検証対象位置を開始位置とする未検証データ列の少なくとも一部と内容が一致する同一データ列を前記旧データ列から検索する機能と、
前記同一データ列が前記旧データ列から検出されなければ、前記差分データ列のうち前記部分データ列に対応する差分単位データ列として、前記未検証データ列の先頭のデータを記録して、前記検証対象位置を所定分進める機能と、
前記同一データ列が前記旧目印領域内から検出されたときには、前記差分単位データ列として、前記同一データ列の旧目印領域内における位置と前記同一データ列の長さを記録して、前記検証対象位置を前記同一データ列の長さ分進める機能と、
前記同一データ列が前記旧目印領域外から検出されたときには、前記同一データ列を含むように前記旧目印領域を移動させ、前記差分単位データ列として、少なくとも、前記旧目印領域の移動後の位置と前記同一データ列の長さを記録して、前記検証対象位置を前記同一データ列の長さ分進める機能と、
前記新データ列において前記同一検索処理の対象となっていない未検証データ列が存在するときには、前記同一検索処理を再実行する機能とをコンピュータに実現させるためのコンピュータプログラム。
【請求項１９】
旧データ列と新データ列との差分データ列により、前記旧データ列に基づいて前記新データ列を復元する方法であって、
前記旧データ列を取得するステップと、
前記差分データ列を取得するステップと、
前記旧データ列の部分的な領域を示す旧目印領域を設定するステップと、
前記読み出した差分データ列に基づいて前記旧データ列を用いて新データ列を復元するステップとを、備え、
前記新データ列を復元するステップにおいては、
前記差分データ列から所定単位の差分データ列を読み出し、
前記読み出した所定の単位の差分データ列が新データ列のデータそのものを示すときには、当該データを新データ列の一部として復元し、
前記読み出した所定単位の差分データ列が位置と長さを示すときには、前記旧目印領域内における前記位置から前記長さ分のデータ列を前記新データ列の一部として復元し、
前記読み出した所定単位の差分データ列が前記旧目印領域の移動位置を示すときには、前記旧目印領域を前記移動位置に移動させ、
前記差分データ列において前記新データ列を復元するステップを実行していないデータ範囲が存在するときには、前記復元するステップを再実行することにより、前記旧データ列から前記新データ列を復元することを特徴とするデータ復元方法。
【請求項２０】
旧データ列と新データ列との差分データ列により、前記旧データ列に基づいて前記新データ列を復元する方法であって、
前記旧データ列を取得するステップと、
前記差分データ列を取得するステップと、
前記旧データ列の部分的な領域を示す旧目印領域を設定するステップと、
前記新データ列の部分的な領域を示す新目印領域を前記新データ列のうち前記旧データ列から復元済みのデータ範囲における所定位置に設定するステップと、
前記読み出した差分データ列に基づいて前記旧データ列と前記新データ列の復元済みのデータ範囲とを用いて新データ列を復元するステップとを、備え、
前記新データ列を復元するステップにおいては、
前記差分データ列から所定単位の差分データ列を読み出し、
前記読み出した所定単位の差分データ列が新データ列のデータそのものを示すときには、当該データを新データ列の一部として復元し、
前記読み出した所定単位の差分データ列が位置と長さを示すときには、前記旧目印領域と前記新目印領域のいずれかに設定されている現目印領域内における前記位置から前記長さ分のデータ列を前記新データ列の一部として復元し、
前記読み出した所定単位の差分データ列が前記現目印領域の移動位置を示すときには、前記現目印領域を前記移動位置に移動させ、
前記読み出した所定単位の差分データ列が、現目印領域の変更を示すスイッチデータを示すときには、前記現目印領域を設定変更し、
前記差分データ列において新データ列を復元するステップを実行していないデータ範囲が存在するときには、前記復元するステップを再実行することにより、前記新データ列を復元することを特徴とするデータ復元方法。
【請求項２１】
旧データ列と新データ列との差分データ列により、前記旧データ列に基づいて前記新データ列を復元する装置であって、
前記旧データ列を保持する旧データ保持部と、
前記差分データ列を保持する差分データ保持部と、
前記旧データ列の部分的な領域を示す旧目印領域を設定する旧目印領域設定部と、
前記差分データ列に基づいて前記旧データ列を用いて新データ列を復元する復元部と、を備え、
前記復元部は、
前記差分データ列から所定単位の差分データ列を読み出し、
前記読み出した所定単位の差分データ列が新データ列のデータそのものを示すときには、前記差分データ列に含まれるデータを新データ列の一部として復元し、
前記読み出した所定単位の差分データ列が位置と長さを示すときには、前記旧目印領域内における前記位置から前記長さ分のデータ列を前記新データ列の一部として復元し、
前記読み出した差分データ列が前記旧目印領域の移動位置を示すときには、前記旧目印領域を前記移動位置に移動させ、
前記差分データ列において前記新データ列を復元していないデータ範囲が存在するときには、前記新データ列の復元を再実行することにより、前記旧データ列から前記新データ列を復元することを特徴とするデータ復元装置。
【請求項２２】
旧データ列と新データ列との差分データ列により、前記旧データ列に基づいて前記新データ列を復元するコンピュータプログラムであって、
前記旧データ列を保持する機能と、
前記差分データ列を保持する機能と、
前記旧データ列の部分的な領域を示す旧目印領域を設定する機能と、
前記差分データ列から所定単位の差分データ列を読み出す機能と、
前記読み出した差分データ列が新データ列のデータそのものを示すときには、前記差分データ列に含まれるデータを新データ列の一部として復元する機能と、
前記読み出した差分データ列が位置と長さを示すときには、前記旧目印領域内における前記位置から前記長さ分のデータ列を前記新データ列の一部として復元する機能と、
前記読み出した差分データ列が前記旧目印領域の移動位置を示すときには、前記旧目印領域を前記移動位置に移動させる機能と、
前記差分データ列において前記差分単位データ列を抽出していないデータ範囲が存在するときには、前記差分データ列から差分単位データ列の抽出を再実行する機能と、をコンピュータに実現させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、異なるデータ間における差分データ生成および差分データを用いた新データの復元に関連し、特に、通信回線を介してソフトウェアをアップデートするための技術、に関する。
【背景技術】
【０００２】
携帯電話のファームウェア（Firmware）は、複雑化・高機能化・大規模化しつつある。製品リリース前にファームウェアの不具合を完全に除去するのは難しくなってきており、製品リリース後でもファームウェアを適宜修正できる仕組みが必要である。
【０００３】
近年、無線通信回線を介して携帯電話のファームウェアをアップデートするための技術として、ＦＯＴＡ（Firmware Over The Air）が注目されている。ＦＯＴＡは、ファームウェアの不具合を修正するだけでなく、ファームウェアの機能を拡張する場面でも応用できる。以下、携帯電話などの電子機器に導入されている更新前データのことを「旧データ」、修正済みファームウェアのような更新後データのことを「新データ」とよぶことにする。
【０００４】
旧データから新データへの移行に際して、新データ全体をダウンロードするのは得策ではない。特に、通信速度が遅くデータ再送が発生しやすい無線通信回線を経由する場合、ダウンロード対象となるデータのサイズをなるべく小さくしたい。下記に挙げた特許文献１では、旧データと新データの差分を示す「差分データ」をダウンロード対象としている。
【特許文献１】米国特許第７０６９３１１号（明細書、特に第４欄）
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ＦＯＴＡの実効性にとっては、この差分データのサイズをいかに小さくできるかが重要である。本発明の主たる目的は、クライアント端末において旧データから新データへ移行するための差分データのサイズを小さくするための技術、を提供することである。
【課題を解決するための手段】
【０００６】
本発明のある態様は、旧データ列と新データ列との差分データ列を生成する方法に関する。
このデータ生成方法においては、新データ列に検証対象位置を設定し、検証対象位置を開始位置とする未検証データ列の少なくとも一部と内容が一致する同一データ列を旧データ列から検索し、未検証データ列の少なくとも一部に対応する差分単位データ列を差分データ列の一部として順次生成する。また、旧データ列の一部に旧目印領域を設定する。
ここで、差分単位データ列の生成においては、
１．同一データ列が旧データ列から検出されなければ、未検証データ列の少なくとも一部に対応する差分単位データ列として、未検証データ列の少なくとも一部を記録する。好ましくは、未検証データ列の先頭のデータを記録してもよい。検証対象位置を所定分だけ進める。
２．同一データ列が旧目印領域内から検出されたときには、未検証データ列の少なくとも一部に対応する差分単位データ列として、同一データ列の旧目印領域内における位置と同一データ列の長さを記録する。検証対象位置を同一データ列の長さ分だけ進める。
３．同一データ列が旧目印領域外から検出されたときには、同一データ列を含むように旧目印領域を移動させ、未検証データ列の少なくとも一部に対応する差分単位データ列として、旧目印領域の移動後の位置と同一データ列の長さを記録する。このときにも、検証対象位置を同一データ列の長さ分だけ進める。
新データ列において未検証データ列が残っているときには、上記処理を再実行する。
【０００７】
本発明のある態様は、旧データ列と新データ列との差分データ列により、旧データ列に基づいて新データ列を復元する方法に関する。
このデータ復元方法においては、旧データ列の一部に旧目印領域を設定し、新データ列のうち、差分単位データ列に対応する部分の新データ列を旧データ列に基づいて復元する。
新データ列の復元においては、
１．差分データ列から所定単位の差分データ列を読み出す。
２．読み出した差分データ列が新データ列のデータそのものを示すときには、前記差分データ列に含まれるデータを新データ列の一部として復元する。
３．読み出した差分データ列が位置と長さを示すときには、旧目印領域内における「位置」から「長さ」分のデータ列を新データ列の一部として復元する。
４．読み出した差分データ列が旧目印領域の移動位置を示すときには、旧目印領域を指定位置まで移動させる。
差分データ列において新データ列の復元をしていないデータ範囲が存在するときには、新データ列の復元を再実行することにより、旧データ列から新データ列を復元する。
【０００８】
なお、以上の構成要素の任意の組合せ、本発明を装置、システム、記録媒体、コンピュータプログラムにより表現したものもまた、本発明の態様として有効である。
【発明の効果】
【０００９】
本発明によれば、コンパクトな差分データを作成できると共に、復元時の処理が簡易となる。
【発明を実施するための最良の形態】
【００１０】
図１は、ネットワークシステム１０１の全体構成図である。
ネットワークシステム１０１において、サーバ装置１００とクライアント端末２００ａはインターネット３００を介して接続される。また、クライアント端末２００ｂは、基地局３０２を介してインターネット３００と接続されている。クライアント端末２００ａやクライアント端末２００ｂ（以下、まとめていうときには、単に「クライアント端末２００」とよぶ）は、携帯電話、ＰＤＡ（Personal Digital Assistant）、ラップトップ・コンピュータなどのモバイル機器であってもよいし、デスクトップ・コンピュータ、セットトップ・ボックスなどであってもよい。
【００１１】
クライアント端末２００には「旧データ」が導入されている。旧データは、ファームウェアやアプリケーション、ＯＳ（Operating System）のようなプログラムデータに限らず、音声データや画像データであってもよい。サーバ装置１００の主目的は、クライアント端末２００の旧データを新データに変更することである。
【００１２】
図２は、アップデート処理の概要を説明するための模式図である。
サーバ装置１００は、旧データと新データの両方を保持している。一方、クライアント端末２００は旧データのみを保持している。以下、バイナリデータの集合という意味で、旧データ、新データ、差分データをそれぞれ「旧データ列」、「新データ列」、「差分データ列」と表記することにする。
【００１３】
サーバ装置１００は、旧データ列と新データ列を入力として後述の「差分処理」を実行することにより、差分データ列を生成する。クライアント端末２００は、サーバ装置１００からこの差分データ列をダウンロードする。クライアント端末２００は、旧データ列と差分データ列を入力として後述の「復元処理」を実行することにより、新データ列を復元する。差分データ列のサイズは、通常、新データ列のサイズや旧データ列のサイズに比べると格段に小さい。このような処理モデルによれば、通信負荷を抑制しつつ、クライアント端末２００のファームウェア等を適宜・一斉に更新できる。
【００１４】
より具体的な例として、旧データ列はアプリケーションＡのバージョン１．０（以下、「Ａ（１．０）」と表記する）、新データ列がアプリケーションＡのバージョン１．１（以下、「Ａ（１．１）」）とする。サーバ装置１００はＡ（１．１）がリリースされたときに、Ａ（１．０）とＡ（１．１）の差分データ列（以下、「Ｄ（１．０→１．１）」と表記する）を生成する。更に、Ａ（１．２）がリリースされると、Ｄ（１．０→１．２）、Ｄ（１．１→１．２）を生成する。サーバ装置１００はアプリケーションＡの新バージョンがリリースされるごとに差分データ列を生成する。
最新バージョンがＡ（１．２）であるときに、クライアント端末２００ａにはＡ（１．０）が導入されているとする。このときには、クライアント端末２００ａは、差分データ列Ｄ（１．０→１．２）をダウンロードすれば、既に保持しているＡ（１．０）からＡ（１．２）を復元できることになる。
【００１５】
サーバ装置１００は各クライアント端末２００にクエリ（Query）をブロードキャストしてもよい。クエリを受信した各クライアント端末２００は、導入されているアプリケーションＡのバージョンをサーバ装置１００に通知する。最新バージョンがＡ（１．２）であるときには、Ａ（１．０）を導入されているクライアント端末２００には差分データ列Ｄ（１．０→１．２）、Ａ（１．１）を導入されているクライアント端末２００には差分データ列Ｄ（１．１→１．２）を送信すれば、すべてのクライアント端末２００の旧データ列を適切かつ一斉にＡ（１．２）へとアップデートできる。このような処理モデルが有効に機能するためには、差分データ列の取り扱い方について、サーバ装置１００とクライアント端末２００が合意していることが前提となる。
新データ列は、旧データ列のアップデート版であってもよいが、必ずしもこれに限定する必要はなく、新データ列と旧データ列は本質的に異なるコンテンツであってもよい。
差分処理および復元処理については２つの実施例にわけて説明する。第２実施例は、第１実施例に対する改良例である。そのため、まず、第１実施例について図３から図１６に関連して詳述したあとに、第２実施例について図１７から図２１に関連して説明する。なお、「本実施例」というときには「第１実施例」と「第２実施例」の両方を意味するものとする。
［第１実施例］
【００１６】
サーバ装置１００と差分処理について図３から図１１に関連して説明する。そのあと、クライアント端末２００と復元処理について図１２から図１６に関連して説明する。
【００１７】
図３は、第１実施例における差分処理の概要を説明するための模式図である。
サーバ装置１００は、旧データ列に「旧目印領域（Ｒｏ）」とよばれる所定幅以内の領域を設定する。「旧目印領域」は、所定長を上限とする大きさの領域であって、旧データ列における「位置」と「データ幅」のセットとして表現される。本実施例における旧目印領域のサイズは６５５３５バイトである。初期設定時においては、旧目印領域Ｒｏの始点位置と旧データ列の始点位置は一致する。旧目印領域Ｒｏの始点位置とは、同図においては、旧目印領域Ｒｏに対応するデータ範囲のうち最も左に位置するバイトデータの位置Ｓｗｏである。また、旧データ列の始点位置とは、同図においては、旧データ列の先頭バイトデータの位置Ｓｏである。いいかえれば、旧目印領域Ｒｏの始点位置は、旧データ列の先頭バイトに初期設定される。差分処理中に旧目印領域Ｒｏは左右に移動するがそのサイズ自体は変化しない。
【００１８】
新データ列には、「検証対象位置（Ｐ）」とよばれるポインタが設定される。初期設定時における検証対象位置Ｐは、新データ列の始点位置Ｓｎに初期設定される。サーバ装置１００は、この検証対象位置Ｐから終点位置までの検証したいデータ範囲（以下、「未検証データ列」とよぶ）の少なくとも一部と同一内容のデータ列（以下、「同一データ列」とよぶ）が旧データ列内に存在するかを判定する。ここで、未検証データ列のうち、同一データ列に対応する範囲、すなわち、同一データが見つかった範囲を、特に、「部分データ列」とよぶことにする。未検証データ列のサイズは固定長であってもよいが、本実施例における未検証データ列は検証対象位置Ｐから続く検証対象位置Ｐを始点位置とした可変長である。以下、未検証データ列と同じ内容の同一データ列を検索する処理を「同一検索」とよぶことにする。
【００１９】
可変長の未検証データ列に対して同一検索を実行するので、同一データ列も可変長のデータ列となる。ただし、本実施例における同一データ列のサイズには、所定の下限値（以下、「検証下限値」とよぶ）が設定されている。本実施例においては、検証下限値＝３バイトである。以下においては、特に断らない限り、「同一データ列」とは検証下限値以上の長さのデータ列であるとして説明する。同一検索の結果は以下の３通りに分類できる。
（ａ）（検証下限値以上の）同一データ列が存在しない。
（ｂ）（検証下限値以上の）同一データ列が存在する。
（ｂ−１）．同一データ列の始点位置が旧目印領域内にある。
（ｂ−２）．同一データ列の始点位置が旧目印領域外にある。
同一検索の結果に応じて、未検証データ列の全部または一部は「差分単位データ列」に変換される。サーバ装置１００は、検証対象位置Ｐを動かしながら同一検索を実行し、それにあわせて差分単位データ列を次々と生成する。未検証データ列の全てに範囲について同一検索を行った結果として生成される差分単位データ列の集合が差分データ列となる。以下、（ａ）を「同一なし」、（ｂ）を「同一あり」、（ｂ−１）を「目印領域内検出」、（ｂ−２）を「目印領域外検出」とよぶことにする。
アルゴリズムの詳細については図５以降にて説明するが、その前にサーバ装置１００の構成を図４を参照しつつ説明する。
【００２０】
図４は、サーバ装置１００の機能ブロック図である。
ここに示す各ブロックは、ハードウェア的には、コンピュータのＣＰＵをはじめとする素子や機械装置で実現でき、ソフトウェア的にはコンピュータプログラム等によって実現されるが、ここでは、それらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックはハードウェア、ソフトウェアの組合せによっていろいろなかたちで実現できることは、当業者には理解されるところである。
後の図１２に示すクライアント端末２００の機能ブロック図についても同様である。
【００２１】
サーバ装置１００は、通信部１１０、データ処理部１２０、データ保持部１６０を含む。
通信部１１０は、クライアント端末２００との通信処理を担当する。データ処理部１２０は、通信部１１０から取得されたデータを元にして各種のデータ処理を実行する。データ処理部１２０は、通信部１１０とデータ保持部１６０の間のインタフェースの役割も果たす。データ保持部１６０は、旧データ列や新データ列等の各種データを格納する。
【００２２】
通信部１１０は、データ取得部１１２と差分送信部１１４を含む。データ取得部１１２は、新データ列を外部装置から受信したり、クエリの発行やクエリに対する応答を受信する。差分送信部１１４は、差分処理により生成された差分データ列をクライアント端末２００に送信する。
【００２３】
データ保持部１６０は、旧データ保持部１６２、新データ保持部１６４および差分データ保持部１６６を含む。旧データ保持部１６２は旧データ列を保持する。新データ保持部１６４は新データ列を保持する。差分データ保持部１６６は差分データ列を保持する。
【００２４】
データ処理部１２０は、目印領域処理部１３０、差分処理部１４０およびハッシュ処理部１５２を保持する。
目印領域処理部１３０は、旧目印領域Ｒｏ、また、第２実施例に関連して後述する「新目印領域（Ｒｎ）」を制御する。「新目印領域」は、所定長を上限とする大きさの領域であって、新データ列における位置とデータ幅として定義されてもよい。目印領域処理部１３０は、各目印領域を移動させる移動設定部１３２と、新目印領域と旧目印領域のいずれかを「現目印領域」として設定するアクティブ設定部１３８を含む。「現目印領域」についても第２実施例に関連して後述する。移動設定部１３２は、旧目印領域を移動させる旧目印領域設定部１３４と新目印領域を移動させる新目印領域設定部１３６を含む。
【００２５】
差分処理部１４０は、旧データ列と新データ列から差分データ列を生成する。差分処理部１４０は、検証位置特定部１４２、同一検索部１４４、差分データ生成部１４６およびデータサイズ率算出部１５０を含む。検証位置特定部１４２は、新データ列に検証対象位置Ｐを設定する。同一検索部１４４は同一検索を実行する。差分データ生成部１４６は、未検証データ列の少なくとも一部から差分単位データ列を生成し、最終的に差分データ列全体を生成する。差分データ生成部１４６は、対象選択部１４９とエンコード部１４８を含む。対象選択部１４９は、後述の符号化データ決定処理の実行に際して、１以上の同一データ列の中から差分単位データ列を生成するための同一データ列を選択する。詳しくは、図１１に関連して後述する。エンコード部１４８は、差分単位データ列を符号化する。符号化についても後述する。データサイズ率算出部１５０は同一データ列とその同一データ列に対応する差分単位データ列を比較して、その「データサイズ率」を算出する。データサイズ率とは、同一データ列のサイズに対する差分単位データ列のサイズの比率を示すが、具体的には後述する。
なお、目印領域処理部１３０による目印領域に関する処理と、差分処理部１４０による差分データ生成に関する処理とは、単一のコンピュータプログラムによって実現されてもよい。
【００２６】
図５は、第１実施例における差分処理の過程を示すフローチャートである。
まず、旧目印領域設定部１３４は、旧データ列の先頭バイトが旧目印領域Ｒｏの始点位置となるように、旧目印領域Ｒｏを初期設定する（Ｓ１０）。検証位置特定部１４２は、新データ列の先頭バイトに検証対象位置Ｐを初期設定する（Ｓ１２）。同一検索部１４４は、検証対象位置Ｐの１バイト分のデータ列と同じ内容のデータ列を、旧データ列全体を対象として同一検索する（Ｓ１６）。初期状態においては、未検証データ列の先頭１バイトと同一内容のデータ列を検索することになる。検出されなければ（Ｓ１８のＮ）、差分データ生成部１４６は検索対象位置Ｐの未検証データ列の１バイト分を差分単位データ列として取り出して符号化し（Ｓ３０）、検証対象位置Ｐを１バイトだけ進める（Ｓ３２）。処理はＳ１４に戻る。新データ列全体について検証が完了すると（Ｓ１４のＹ）、差分データ列の終端を示す「終端マーク（ＥＯＦ）」を挿入する（Ｓ３４）。新データ列に未検証のデータ範囲が存在するときには（Ｓ１４のＮ）、移動後の検証対象位置Ｐに基づいて、Ｓ１６以降の処理を再実行する。
【００２７】
同一内容のデータ列が検出されると（Ｓ１８のＹ）、検証位置特定部１４２は、未検証データ列の検証対象位置Ｐから長さを１バイトずつ延長しながら、一致しなくなるまで同一部分を検索する。そして、同一データ列が検証下限値以上の長さとなるか判定する（Ｓ２０）。そして検証下限値以上の長さの同一データ列が検出されなければ（Ｓ２０のＮ）、処理はＳ３０に移行する。このときにも、差分データ生成部１４６は検証対象位置Ｐの新データ列の１バイト分を差分単位データ列として取り出して符号化し（Ｓ３０）、検証対象位置Ｐを１バイトだけ進める（Ｓ３２）。
すなわち、上記（ａ）の「同一なし」に該当する場合には（Ｓ１８のＮ、Ｓ２０のＮ）、差分データ生成部１４６は検索対象位置Ｐの新データ列の１バイト分を差分単位データ列として取り出して符号化し（Ｓ３０）、検証対象位置Ｐを１バイトだけ進める（Ｓ３２）。「同一なし」時の処理内容については、次の図６に関連して更に詳述する。
【００２８】
検証下限値以上の長さの同一データ列が検出されるごとに少なくともその位置と一致長とを保存しておき、次に見つかったときには保存されているものとどちらが長いかを比較する。最終的に最長一致する同一データ列を特定する。本実施例においては、符号化データ決定処理（Ｓ２２）により同一データ列を選択しているが、この符号化データ決定処理を実行しなくても、最長一致を判断基準として同一データ列を選択しても差分処理を実現することは可能である。説明を簡単にするため、以下においては、特に断らない限り「未検証データ列について同一検索を実行し、最終的に最長一致する同一データ列を特定する。」という前提にて説明する。符号化データ決定処理（Ｓ２２）も、最長一致する同一データ列を選ぶという考え方を基本原則としているが、差分データ列全体としてのサイズを小さくするという観点からより合理的に同一データ列を選択するための工夫が施されている。符号化データ決定処理（Ｓ２２）の詳細については図１１に関連して後述する。
【００２９】
同一データ列が特定されると、差分データ生成部１４６は、選択された同一データ列の始点位置が旧目印領域Ｒｏ内にあるか否かを判定する（Ｓ２４）。同一データ列の始点位置が旧目印領域Ｒｏ内にあれば（Ｓ２４のＹ）、すなわち、上記（ｂ−１）の「目印領域内検出」であれば、差分データ生成部１４６は、同一データ列から図７に関連して説明する方法にて差分単位データ列を生成する（Ｓ２８）。このときの同一データ列のサイズが（ｎ＋１）バイトであれば、検証開始位置はＰ＋ｎ＋１に移動する（Ｓ３２）。本実施例の場合、検証下限値＝３バイトなので（ｎ＋１）≧３である。
【００３０】
同一データ列の開始位置が旧目印領域Ｒｏ外であれば（Ｓ２４のＮ）、すなわち、上記（ｂ−２）の「目印領域外検出」であれば、旧目印領域設定部１３４は旧目印領域Ｒｏ内に同一データ列の始点位置が含まれるように旧目印領域Ｒｏを移動させてから（Ｓ２６）、同一データ列から図８に関連して説明する方法にて差分単位データ列を生成する（Ｓ２８）。同一データ列のサイズが（ｎ＋１）バイトであれば、検証開始位置はＰ＋ｎ＋１に移動する（Ｓ３２）。
こうして、新データ列の検証対象位置Ｐを少しずつ移動させながら差分単位データ列の集合が生成されることになる。Ｓ２８やＳ３０にて差分単位データ列を順次生成していき、最終的に、全体としての差分データ列を生成する。実際には、同一データ列から差分単位データ列を生成する処理Ｓ１００は更に複雑であるが、これについては図１０に関連して説明する。差分処理の基本的な仕組みは以上の通りである。
【００３１】
図６は、（ａ）「同一なし」時における差分単位データ列の生成方法を示す模式図である。
同一検索部１４４は、検証対象位置Ｐにある１バイトの部分データ列「ｎ０」と同じデータ列を旧データ列から検索する。検出できれば、検証対象位置Ｐ〜Ｐ＋１の２バイト分の部分データ列「ｎ０、ｎ１」と一致するか判定する。こうして１バイトずつ延長しながら同一データ列の一致する長さを検証する。同図の場合、同一検索の結果が「同一なし」である場合を示している。すなわち、検証対象位置Ｐ〜Ｐ＋２までの３バイト分のデータ列について同一データ列が検出できなかった場合を示している。
【００３２】
同一検索の結果が「同一なし」となると、差分データ生成部１４６は、新データ列の検証対象位置Ｐにある「ｎ０」を取り出して差分単位データ列として記録する（Ｓ３０）。検証位置特定部１４２は、新たな検証対象位置をＰ＋１に設定変更する（Ｓ３２）。同一検索部１４４は、新たな検証対象位置Ｐ＋１について同一検索を実行する。ここでも同一検索の結果が「同一なし」となると、検証対象位置Ｐ＋１にある「ｎ１」が差分単位データ列として取り出して符号化され（Ｓ３０）、新たな検証対象位置はＰ＋２となる（Ｓ３２）。このように、同一検索の結果が「同一なし」となるときには、検証対象位置Ｐに位置する１バイトのデータが差分データ列の一部を形成する差分単位データ列として記録される。
【００３３】
図７は、（ｂ−１）「目印領域内検出時」における差分単位データ列の生成方法を示す模式図である。
同図の場合、まず、検証下限値以上一致する同一データ列「ｍ０、ｍ１、ｍ２、ｍ３、ｍ４」が旧目印領域Ｒｏ内を始点位置として検出されている。このときの旧目印領域Ｒｏ内における始点位置と長さを保存しておく。更に、同一検索を続行すると、検証下限値以上一致する同一データ列「ｍ０、ｍ１、ｍ２」が旧目印領域Ｒｏ外を始点位置として検出されている。同一データ列「ｍ０、ｍ１、ｍ２、ｍ３、ｍ４」の方が、同一データ列「ｍ０、ｍ１、ｍ２」より長いため、同一検索の結果は「（ｂ−１）目印領域内検出」となる。
【００３４】
ｎ０＝ｍ０、ｎ１＝ｍ１、・・・、ｎ４＝ｍ４であるが、新データ列における未検証データ列の開始位置と旧データ列における同一データ列の始点位置は必ずしも対応関係にはない。同一検索においてはあくまでも「データの並びが一致するか否か」だけが判断の対象となる。
【００３５】
差分データ生成部１４６は、同一データ列の長さ（以下、「同一サイズ」とよぶ）と同一データ列の始点位置の旧目印領域Ｒｏ内における位置（以下、「目印領域内位置」とよぶ）を特定する。本実施例における目印領域内位置は、一例として、旧目印領域Ｒ０の先頭位置からの距離（バイト数）により示されるものとして説明する。旧目印領域Ｒｏの先頭バイトの位置を「０」とすると、同図における同一データ列の目印領域内位置は「１」となる。また、同一サイズは５バイトである。したがって、差分データ生成部１４６は、未検証データ列「ｎ０〜ｎ４」を符号化して、差分単位データ列（５，１）に変換する。いいかえれば、ｎ０〜ｎ４の５バイトのデータ列は、（５，１）という２つの数値で表現されることになる。同一サイズが大きいほど、差分データ列のサイズを効率的に小さくできる。
【００３６】
図８は、（ｂ−２）「目印領域外検出時」における差分単位データ列の生成方法を示す模式図である。
同図においては、５バイトのデータ列「ｎ０〜ｎ４」と最長一致するデータ列「ｍ０〜ｍ４」が同一データ列として検出されている。同一データ列「ｍ０〜ｍ４」の始点位置、すなわち、「ｍ０」の位置は旧目印領域Ｒｏの外にある。したがって、同一検索の結果は、「（ｂ−２）目印領域外検出」である。
【００３７】
目印領域外検出時においては、旧目印領域設定部１３４は、旧目印領域Ｒｏが同一データ列の始点位置を含むように旧目印領域Ｒｏを移動させる。旧目印領域の移動後の位置を「移動位置Mr」と表記する。旧目印領域Ｒｏの移動方向は限定されない。右にも左にも移動可能である。この旧目印領域の移動後の位置は、旧データ列の先頭バイトから数えて何バイト目か、あるいは、旧データ列の最終バイトから数えて何バイト目かにより示される。本実施例においては、旧データ列の先頭バイトから数えた位置を「Mｒ」と表記することにする。
【００３８】
差分データ生成部１４６は、旧目印領域Ｒｏの移動を示すＭと、移動位置Mr、移動後の旧目印領域Ｒｏ’についての目印領域内位置、同一サイズを特定する。同図の場合、（領域移動を示すマーク（以下、「移動マーク」とよぶ），移動位置）（同一サイズ，目印領域内位置）＝（Ｍ，Mｒ）（５，０）となる。本実施例においては、目印領域外検出時においては、旧目印領域Ｒｏ’の始点位置が同一データ列の始点位置と一致するように、旧目印領域Ｒｏを移動させる。そのため、目印領域内位置は必ず「０」となる。これにより復元時の処理が容易となる。別例として、目印領域内位置「０」を省略するとしてもよい。この場合、ｎ０〜ｎ４の５バイトの未検証データ列は（Ｍ，Mｒ）（５）という数値で表現されることになる。目印領域外検出においても、同一データ列が長いほど、差分データ列のサイズを効率的に小さくできることになる。
【００３９】
本実施例のサーバ装置１００は、旧目印領域Ｒｏ内だけではなく旧データ列全体を対象として同一検索を実行する。このため同一データ列が検出される可能性が高いアルゴリズムとなっている。本実施例では、新データ列の検証対象位置Ｐが移動したからといって旧目印領域が移動するとは限らない。（ｂ−２）の目印領域外検出により旧目印領域Ｒｏを移動させるときには、領域移動を意味する移動マークＭと移動位置Mｒが差分データ列の一部として明示的に記録されることになる。差分処理において最長一致する同一データ列をカバーできるように旧目印領域Ｒｏの位置を自由に動かす形式となっている。こうすることで、差分処理や複合処理の処理速度を速めることと、差分データのサイズを小さくすることとを好適に実現することを目的としている。
【００４０】
本実施例における旧目印領域Ｒｏのサイズは６５５３５バイトという固定長となっている。このため、目印領域内検出、目印領域外検出のいずれの場合においても目印領域内位置ｎの範囲を検証下限値３〜旧目印領域Ｒｏのサイズ６５５３５の範囲内に納めることができる。更に、同一データ列に検証上限値Ｌｍを設定することにより、同一サイズＬの範囲を狭めてもよい。検証上限値Ｌｍについては図９に関連して説明する。
【００４１】
差分単位データ列において、目印領域内位置ｎや同一サイズＬ、移動位置Mｒ等を数値として記録してもよいが、これらのデータを符号化することにより差分データ列をいっそう小さくできる。たとえば、検証上限値Ｌｍ＝６４５とすると、同一サイズＬは３〜６４５の範囲の数値となる。エンコード部１４８は、所定の符号変換表に基づいて、同一サイズＬを所定サイズの符号に変換する。移動マークＭや、目印領域の移動後位置を示すMｒは特殊コードにより識別される。
【００４２】
検証下限値を設けなければ、同一データ列の検出率は高くなる。しかし、１バイト程度の部分データ列を差分単位データ列に変換すると、かえって冗長となってしまう。検証下限値を設けることにより、このような冗長な変換処理が発生しないように制御できる。以下、（ｂ）の「同一あり」により記録される未検証データ列を目印領域内位置や同一サイズ等に変換したデータのことを「変換データ」とよび、（ａ）の「同一なし」により新データ列に含まれている文字そのものを符号化したデータ「非変換データ」と呼んで区別する。復元側のクライアント端末２００は、差分単位データ列のデータを復号するとき、それが文字そのものを符号化した「非変換データ」であるか目的領域内位置等から符号化された「変換データ」であるかを識別できる。
【００４３】
更に、本実施例においては、ハッシュ・アルゴリズムを利用することにより、差分処理を高速化している。ハッシュ処理部１５２は、旧データ列の第０バイトから３バイト分、第１バイトから３バイト分、・・・のようにデータ列の３バイト単位の所定のハッシュ関数によりハッシュ値を生成する。旧データ保持部１６２は、旧データ列自体に加えて旧データ列のハッシュ値列も保持する。
【００４４】
ハッシュ処理部１５２は、新データ列の検証対象位置Ｐから３バイト分のデータ列について、上記ハッシュ関数によりハッシュ値を生成する。同一検索部１４４は、旧データ列のハッシュ値列を対象として未検証データ列のハッシュ値を検索することにより、同一データ列の位置を検索する。本発明者の検証によると、このような処理方法によれば、同一データ列の検索速度を４０倍から５０倍向上させることができる。
ただし、実装においては、ハッシュ値による検索により同一データ列候補の位置を特定したあとは、旧データ列における候補位置のデータそのものを検証することにより最終的に同一データ列を特定している。たとえば、ハッシュ関数によっては、「ａｂｃ」というデータ列と「ｂａｃ」というデータ列が同一のハッシュ値を生成してしまう可能性がある。そこで、図５のＳ１６からＳ２０においては、まず、ハッシュ値に基づいて同一データ列の存在する可能性のある位置を特定した上で、１バイトずつ検証することにより、高速性と正確性を両立させている。
【００４５】
図９は、同一データ列のサイズが検証上限値Ｌｍに達するときの処理内容を示す模式図である。
検証上限値Ｌｍを設けることにより、同一サイズｎの取りうる範囲を狭めることができる。特に、差分単位データ列を符号化する上で検証上限値Ｌｍの設定は有効である。実装における検証上限値Ｌｍは６４５バイトであるが、ここでは説明を簡単にするためにＬｍ＝７バイトであるとする。同図においては、１２バイトの部分データ列「ｎ０〜ｎ１１」とデータ列「ｍ０〜ｍ１１」が最長一致し、その長さが１２バイトであるとしても、検証上限値Ｌｍ＝７バイトなので、７バイトの部分データ列「ｎ０〜ｎ６」について７バイトの同一データ列「ｍ０〜ｍ６」が検出される。
【００４６】
部分データ列「ｎ０〜ｎ６」を差分単位データ列に変換すると（同一サイズＬ，目印領域内位置ｎ）＝（Ｌｍ，２）となる。旧目印領域設定部１３４は、同一サイズＬ＝Ｌｍとなるときには、同一データ列「ｍ０〜ｍ６」の次の「ｍ７」が旧目印領域Ｒｏの始点位置となるように旧目印領域Ｒｏを移動させる。検証対象位置は、Ｐ＋７となる。
【００４７】
次の部分データ列「ｎ７〜ｎ１１」について最長一致する同一データ列「ｍ７〜ｍ１１」が検出される。部分データ列「ｎ７〜ｎ１１」を差分単位データ列に変換すると（Ｌ，ｎ）＝（５，０）となる。このような場合、移動後の旧目印領域Ｒｏ’の始点位置と同一データ列「ｍ７〜ｍ１１」の始点位置は一致するので、ｎ＝０となっている。そのため、（Ｌ，ｎ）＝（５，０）のうちｎ＝０は省略してもよい。同一サイズが検証上限値Ｌｍとなり、旧目印領域Ｒｏが移動しても、差分単位データ列には旧目印領域Ｒｏの移動位置Mｒのようなデータや移動マークＭが明示的に記録されない点は重要である。「Ｌｍ」というデータが、「同一サイズが検証上限値Ｌｍであって、旧目印領域Ｒｏを移動させる」という２つの情報を意味するためである。
【００４８】
このように、差分処理において旧目印領域Ｒｏが移動する契機となるのは、
（Ａ）（ｂ−２）の目印領域外検出が発生したとき（以下、この場合の目印領域の移動のことを「調整移動」とよぶ）。
（Ｂ）同一サイズＬ＝検証上限値Ｌｍのとき（以下、この場合の目印領域の移動のことを「上限移動」とよぶ）。
の２種類である。調整移動のときには、差分単位データ列には目印領域の移動マークＭと移動位置Mｒが明示的に記録されるが、上限移動のときにはＬｍが暗黙的に目印領域の移動量を示すことになる。
【００４９】
図１０は、図５のＳ１００における処理内容を詳細に示すフローチャートである。
同図は、図６〜図７に関連して説明した内容を踏まえて、図５のＳ１００の処理内容を詳細に示す。（ｂ−１）の目印領域内検出のときには（Ｓ１０２のＹ）、差分データ生成部１４６は同一サイズＬが検証上限値Ｌｍとなるか判定する（Ｓ１０４）。同一サイズＬ＝Ｌｍであれば（Ｓ１０４のＹ）、差分データ生成部１４６は部分データ列から差分単位データ列（Ｌｍ，ｎ）を生成する（Ｓ１０６）。ｎは、旧目印領域Ｒｏにおける目印領域内位置を示す。より正確には、エンコード部１４８は、（Ｌｍ，ｎ）をそれぞれ符号化する。旧目印領域設定部１３４は旧目印領域Ｒｏを上限移動させる（Ｓ１０６）。
同一サイズＬ＜Ｌｍであれば（Ｓ１０４のＮ）、差分データ生成部１４６は部分データ列から差分データ列（Ｌ，ｎ）を生成する（Ｓ１１０）。このときには、旧目印領域Ｒｏは上限移動しない。
【００５０】
（ｂ−２）の目印領域外検出のときには（Ｓ１０２のＮ）、旧目印領域設定部１３４は図８に示した方法により旧目印領域Ｒｏを調整移動させる（Ｓ１１２）。同一サイズＬ＝Ｌｍであれば（Ｓ１１４のＹ）、差分データ生成部１４６は、部分データ列を差分データ列（Ｍ，Mｒ）（Ｌｍ，０）に変換する（Ｓ１１６）。旧目印領域設定部１３４は旧目印領域Ｒｏを更に上限移動させる（Ｓ１１８）。
同一サイズＬ＜Ｌｍであれば（Ｓ１１４のＮ）、差分データ生成部１４６は未検証データ列を差分単位データ列（Ｍ，Mｒ）（Ｌ，０）に変換する（Ｓ１２０）。このときには、旧目印領域Ｒｏは上限移動しない。
【００５１】
以上のように、サーバ装置１００は、旧データ列に旧目印領域Ｒｏを設定し、新データ列の検証対象位置Ｐを動かしながら順次可変長の未検証データ列に対して同一検索を実行し、差分単位データ列を生成する。そして、差分単位データ列を連結することにより、差分データ列全体を生成する。同一検索の処理結果に応じて、旧目印領域Ｒｏの位置が移動する。
長い同一データ列が多く検出されるほど差分データ列を小さくできる。しかし、符号化処理等の過程において、必ずしも同一サイズが大きければ差分データ列を小さくできるとは限らない。たとえば、目印領域外検出の場合調整移動が発生するが、移動マークＭと移動位置Mｒが必要となり、特に移動位置Mｒが大きな値となる可能性がある。そのため、旧目印領域外において大きな同一データ列を検出できても、移動位置Mｒが大きい分だけ差分データ列のサイズは大きくなってしまうかもしれない。
そこで、サーバ装置１００は、未検証データ列と差分単位データ列を比較したときのデータサイズ率まで考慮して差分処理を実行する。このための処理が、図５で触れた「符号化データ決定処理」である。
【００５２】
図１１は、第１の実施例における符号化データ決定処理の処理内容を示す模式図である。
符号化データ決定処理においても、旧データ列全体において可変長の未検証データ列と最長一致する同一データ列を検出することが基本原則である。ただし、符号化データ決定処理では、旧目印領域Ｒｏ内と旧目印領域外のそれぞれから最長一致する同一データ列を検出する。本実施例では、更に、旧データ列の範囲を３つに分けている。すなわち、旧目印領域Ｒｏよりも前方のデータ範囲Ａ、旧目印領域Ｒｏ内のデータ範囲Ｂ、旧目印領域Ｒｏよりも後方のデータ範囲Ｃの３つである。このときにも、ハッシュ値に基づいて、同一検索部１４４は各データ範囲から同一データ列の存在する可能性がある候補位置を検索する。そして、旧データ列における各候補位置のデータ列を検証することにより、同一検索部１４４は、データ範囲Ａ、Ｂ、Ｃのそれぞれに始点位置のある同一データ列を検出する。各データ範囲から検出される同一データ列は、各データ範囲において最長一致する同一データ列である。同図の場合、検証開始位置Ｐからの部分データ列として、部分データ列Ｎ１に対して同一データ列Ｍ１、部分データ列Ｎ２に対して同一データ列Ｍ２、部分データ列Ｎ３に対して同一データ列Ｍ３をそれぞれ検出する。部分データ列Ｎ３のサイズは、部分データ列Ｎ２や部分データ列Ｎ１のサイズよりも大きい。
【００５３】
データサイズ率算出部１５０は、こうして検出された３種類の同一データ列についてのデータサイズ率を計算する。本実施例においては、
データサイズ率＝（差分単位データ列のサイズ）／（同一データ列のサイズ）
と定義する。データサイズ率が小さいほど、同一データ列（あるいは、同一データ列に対応する部分データ列）のサイズに比べて差分単位データ列のサイズが小さくなっていることになる。すなわち、効率よく差分単位データ列のサイズを小さくできていることになる。データサイズ率算出部１５０は、まず、部分データ列Ｎ１から同一データ列Ｍ１について差分単位データ列を試験的に生成し、部分データ列Ｎ１についてのデータサイズ率を算出する。同様にして、部分データ列Ｎ２と同一データ列Ｍ２、部分データ列Ｎ３と同一データ列Ｍ３についてもデータサイズ率を計算する。対象選択部１４９は、３つの同一データ列のうちもっともデータサイズ率が小さい同一データ列を選択する。差分データ生成部１４６は、選択された同一データ列に基づいて差分単位データ列を生成する。データサイズ率を考慮せず、最長一致する同一データ列を選ぶとすれば部分データ列Ｎ３と同一データ列Ｍ３から差分単位データ列が生成されることになる。これに対して符号化データ決定処理によりデータサイズ率まで考慮すると、部分データ列Ｎ１や部分データ列Ｎ２について差分単位データ列が生成される可能性もある。「部分データ列と最長一致する同一データ列」という観点だけではなく、「実際に効率的にデータサイズを小さくできる同一データ列」という観点からも差分生成処理を実行できるため、差分データ列のサイズを合理的に縮小できる。なお、ここでは、旧データ列の３つの範囲からそれぞれ最長一致する同一データ列を検索するとしているが、旧目印領域Ｒ０の内（Ｂ）と外（ＡとＣ）の２つの範囲からそれぞれ最長一致する同一データ列を検索するとしてもよい。
変形例として、検証対象位置Ｐを開始位置とする可変長の未検証データ列について、同一検索部１４４は、目印領域の内外にかかわらず検証下限値以上のサイズとなる長短様々な同一データ列を順次検出し、データサイズ率算出部１５０はその都度データサイズ率を算出してもよい。そして、対象選択部１４９は、最終的にデータサイズ率が最小となるときの同一データ列を選択してもよい。
【００５４】
次に、サーバ装置１００が生成した差分データ列に基づいて、新データ列を復元する復元処理について説明する。その前に、復元処理を実行するクライアント端末２００の構成について説明する。
図１２は、クライアント端末２００の機能ブロック図である。
クライアント端末２００は、通信部２１０、データ処理部２２０およびデータ保持部２４０を含む。
通信部２１０は、インターネット３００を介したサーバ装置１００との通信を行う。データ処理部２２０は、通信部２１０から取得されたデータを元にして各種のデータ処理を実行する。データ処理部２２０は、通信部２１０とデータ保持部２４０の間のインタフェースの役割も果たす。データ保持部２４０は、旧データ列や新データ列等の各種データを格納する。
【００５５】
通信部２１０は、サーバ装置１００から差分データ列を受信する差分受信部２１２を含む。
データ保持部２４０は、旧データ保持部２４２、新データ保持部２４４、差分データ保持部２４６を含む。旧データ保持部２４２は旧データ列を保持する。新データ保持部２４４は旧データ列と差分データ列から復元される新データ列を保持する。差分データ保持部２４６は差分データ列を保持する。
【００５６】
データ処理部２２０は、目印領域処理部２２２と復元部２３２を含む。
目印領域処理部２２２は、旧目印領域と、第２実施例で説明する「新目印領域（Ｒｎ）」を制御する。目印領域処理部２２２は、目印領域を移動させる移動設定部２２４と、新目印領域と旧目印領域のいずれかを「現目印領域」として設定するアクティブ設定部２３０を含む。「現目印領域」についても第２実施例に関連して説明する。移動設定部２２４は、旧目印領域を移動させる旧目印領域設定部２２６と新目印領域を移動させる新目印領域設定部２２８を含む。
【００５７】
復元部２３２は、読出部２３４と新データ生成部２３６を含む。
読出部２３４は、差分データ列を順次読み出す。新データ生成部２３６は、旧データ列と差分データ列から新データ列を復元する。新データ生成部２３６はデコード部２３８を含む。デコード部２３８は差分データ列の符号を復号する
データ処理部２２０には、このほかにもクライアント端末２００のアプリケーション実行機能などさまざまな機能が実装されている。
【００５８】
図１３は、復元処理の過程を示すフローチャートである。
図１３と図１４ではフローチャートを用いて説明し、図１５と図１６では模式図により復元処理の内容を更に具体的に説明する。復元処理の目的は、旧データ列と差分データ列から新データ列を復元することである。そのために、旧目印領域設定部２２６は、まず、旧データ列の先頭バイトを始点位置として旧目印領域Ｒｏを初期設定する（Ｓ１３０）。読出部２３４は、新データ列の先頭バイトに復元開始位置Ｑを初期設定する（Ｓ１３２）。復元処理開始時には新データ列は存在しないので、復元開始位置Ｑ＝０となる。
【００５９】
読出部２３４は、差分データ列の一部を読み出す（Ｓ１３４）。デコード部２３８は、符号化されているこのデータ列をデコードする（Ｓ１３６）。終端マーク（ＥＯＦ）であれば（Ｓ１３８のＹ）、復元処理は終了する。終端マークではなく（Ｓ１３８のＮ）、文字そのものであれば（Ｓ１４０のＹ）、すなわち、図６に関連して説明したように新データ列に含まれるテキストデータが非変換データとして記録されているのであれば、新データ生成部２３６は読み出した１バイト分のデータ列を新データ列に追加する（Ｓ１４２）。このとき、新データ生成部２３６は、復元開始位置Ｑを１バイト分だけ進める。一方、読み出したデータ列が変換データであって（Ｓ１４０のＮ）、旧目印領域Ｒｏの移動を示す移動マークＭであれば（Ｓ１４４のＹ）、差分データ列をさらに読み出してデコードすることで移動位置Mｒを取得する（Ｓ１４６）。旧目印領域設定部２２６は、旧目印領域ＲｏをMｒによって示される位置に調整移動させる（Ｓ１４８）。
【００６０】
移動マークＭでなければ（Ｓ１４４のＮ）、読み出されたデータ列（Ｌ，ｎ）と旧データ列に基づいて新データ列を復元する（Ｓ１５０）。いいかえれば、終端マーク、文字、移動指示マークＭのいずれでもなければ、同一サイズＬと目印領域内位置ｎであるため、ｎとＬに基づいて、新データ列を復元する。Ｓ１５０の部分復元処理の詳細については次の図１４に関連して説明する。このとき、読み出されたデータ列から復元された新データ列のサイズがＬであれば、復元開始位置はＱ＋Ｌに変更される。このように、終端マークが現れるまで、Ｓ１４０以降の処理が繰り返され、差分データ列を少しずつ読み出してデコードしながら新データ列全体が復元されることになる。いいかえれば、差分単位データ列を基本的な処理単位として、復元処理が実行されている。
【００６１】
図１４は、図１３のＳ１５０における部分復元処理を詳細に示すフローチャートである。
読出部２３４は、同一サイズＬを読み出し（Ｓ１５０）、次のデータを読み出す（Ｓ１５２）。デコード部２３８はこれを復元する（Ｓ１５４）。読出部２３４は、復元されたデータから目的領域内位置ｎを取得する（Ｓ１５６）。新データ生成部２３６は、旧目印領域Ｒｏを基準として、（Ｌ，ｎ）から部分的な新データ列を復元する（Ｓ１５８）。すなわち、新データ生成部２３６は旧目印領域Ｒｏ内の位置ｎからＬバイト分のデータ列を取り出して新データ列として追加する。
ここで、Ｌ＝Ｌｍであれば（Ｓ１６０のＹ）、旧目印領域設定部２２６は旧目印領域Ｒｏを上限移動させる（Ｓ１６２）。
【００６２】
図１５は、図１３のＳ１４２における文字復元処理を説明するための模式図である。
同図においては、読み出した差分データ列において、「ｎ０」という１バイトの文字データが含まれているとする。ただし、この文字データは符号化されている。読出部２３４は、まず、差分データ列として１バイトのデータ「ｎ０」を抽出し、これをデコードし、文字データであると判定する。新データ生成部２３６は、復元中の新データ列において、復元開始位置Ｑに「ｎ０」を追加する。復元開始位置はＱ＋１に変更される。このように、差分データ列が符号化された文字データであるときには、その文字データが新データ列として追加されていく。
【００６３】
図１６は、図１４における変換データの復元を示す模式図である。
読み出した差分データ列が（５，１）という変換データであったとする。「５」は同一サイズＬを示し、「１」は目印領域内位置ｎを示す。このとき新データ生成部２３６は、旧目印領域Ｒｏの位置「１」から５バイト分のデータを新データ列に追加する。このため、（５，１）という小さな差分データ列から５バイト分の新データ列を復元できることになる。復元開始位置はＱからＱ＋５に移動する。
【００６４】
仮に、読み出した差分データ列が（Ｌｍ，ｎ）という変換データでも、旧目印領域Ｒｏの位置「ｎ」からＬｍバイト分のデータ列を新データ列に追加する。復元開始位置はＱからＱ＋Ｌｍに移動する。ただし、旧目印領域設定部２２６は、検証上限値Ｌｍを検出すると旧目印領域Ｒｏを上限移動させる（Ｓ１６２）。差分単位データ列（Ｌｍ，ｎ）のうち、「Ｌｍ」は旧目印領域Ｒｏの上限移動を暗黙的に指示するデータとなっている。
【００６５】
読み出した差分データ列が（Ｍ，Mｒ）（Ｌ，０）という変換データの場合、旧目印領域設定部２２６は旧目印領域ＲｏをMｒに調整移動させた後、移動後の旧目印領域Ｒｏ’の始点位置から「Ｌ」バイト分のデータ列を取り出して新データ列に追加する。
更に、読み出した差分データ列が（Ｍ，Mｒ）（Ｌｍ，０）という変換データの場合には、旧目印領域設定部２２６は、旧目印領域ＲｏをMｒに調整移動させ、新データ生成部２３６は移動後の旧目印領域Ｒｏ’の始点位置から「Ｌｍ」バイト分のデータ列を取り出す。そのあと、更に、旧目印領域設定部２２６は、旧目印領域Ｒｏを上限移動させる。
［第２実施例］
【００６６】
第１実施例において同一検索の対象となるのは、「旧データ列全体」である。これに対して、第２実施例において同一検索の対象となるのは、「旧データ列全体＋差分処理済みの新データ列全体」となる。
【００６７】
図１７は、第２実施例における差分処理の概要を説明するための模式図である。
同図において検証開始位置Ｐとすると、同一検索対象となるのは、旧データ列全体と、新データ列のうち「０〜（Ｐ−１）」の範囲である。すなわち、差分処理が進行し、Ｐが移動するごとに同一検索の対象範囲が拡大していく。このため、差分処理が進むほど、同一データ列の検出率がいっそう向上しやすい。第２実施例に示す差分処理は、同一内容のデータ列が繰り返し現れるタイプの新データ列において特に有効である。
【００６８】
第２実施例においては、旧目印領域Ｒｏだけでなく、新目印領域Ｒｎを新データ列に設定する。旧データ列から同一データ列が目印領域内検出されると差分単位データ列を（Ｒｏ，Ｌ，ｎ）、新データ列から同一データ列が目印領域内検出されると差分単位データ列を（Ｒｎ，Ｌ，ｎ）として表現してもよい。このように、旧データ列と新データ列のいずれを対象として差分単位データ列を生成したかを、Ｒｏ、Ｒｎの指定により示してもよい。
【００６９】
たとえば、５バイトの未検証データ列「ｎ０〜ｎ４」を対象として同一検索を行ったとき、新目印領域Ｒｎ内において最長一致する同一データ列「ｃ０〜ｃ４」が検出されたとする。この場合、差分単位データ列は、（Ｒｎ，５，１）となる。
ただし、第２実施例においては、旧目印領域Ｒｏと新目印領域Ｒｎのいずれかを現目印領域Ｒｃとして設定する。この現目印領域Ｒｃには、常に、旧目印領域Ｒｏと新目印領域Ｒｎのいずれかが設定されている。現目印領域Ｒｃは、新データ列と旧データ列のどちらが「アクティブ」であるかを示す。一例を示す。
【００７０】
Ｒｃ＝Ｒｏのとき：
未検証データ列のうち同一データ列が検出された部分データ列「ｎ０〜ｎ４」の差分単位データ列は（Ｓｗ）（５，１）となる。Ｓｗは、現目印領域の変更を示す。現目印領域Ｒｃ＝旧目印領域Ｒｏのときに、新データ列に基づいて差分単位データ列を生成するときには、新データ列を非アクティブからアクティブに変更する。このとき、アクティブ設定部１３８は、現目印領域Ｒｃ＝新目印領域Ｒｎに設定変更し、現目印領域Ｒｃの設定変更を示すＳｗを差分単位データ列の一部として記録する。差分単位データ列（Ｓｗ）（５，１）は、変更後の現目印領域Ｒｃについて、目印領域内位置ｎ＝１、同一サイズＬ＝５のデータ列から新データ列を復元できることを示す。
復元側では、差分単位データ列からＳｗを検出すると、現目印領域Ｒｃを設定変更する。
【００７１】
Ｒｃ＝Ｒｎのとき：
未検証データ列のうち同一データ列が検出された部分データ列「ｎ０〜ｎ４」の差分単位データ列は（５，１）となる。現目印領域Ｒｃ＝新目印領域Ｒｎのときに、新データ列に基づいて差分単位データ列を生成するときには、新データ列はアクティブのままである。すなわち、差分単位データ列（５，１）は、現在の現目印領域Ｒｃについて、目印領域内位置ｎ＝１、同一サイズＬ＝５のデータ列から新データ列を復元できることを示す。
【００７２】
上記は、（ｂ−１）目印領域内検出の場合についての説明であるが、（ｂ−２）目印領域外検出の場合についても同様である。現目印領域Ｒｃによってアクティブとなっているデータ列に基づいて差分単位データ列を生成するときにはＳｗは記録されないが、非アクティブなデータ列に基づいて差分単位データ列を生成するときには、現目印領域Ｒｃを設定変更して、差分単位データ列にＳｗを記録する。
【００７３】
第２実施例においても、検証下限値から検証上限値の範囲において最長一致する同一データ列を検出対象としてもよい。また、目印領域内位置ｎや同一サイズＬ、移動コードＭ、移動位置Mｒについても、第１実施例と同様にして符号化してもよい。また、第２実施例においても、第１実施例と同様にしてハッシュ関数により同一検索の速度を向上させることができる。部分データ列の検出にともなってＰを移動させる場合において、ハッシュ処理部１５２はＰ−１までの新データ列について随時ハッシュ値を生成する。
【００７４】
第２実施例においては、サーバ装置１００は、旧データ列に旧目印領域Ｒｏ、新データ列に新目印領域Ｒｎを設定し、生成済みの新データ列からも同一データ列を検出することで、差分単位データ列を生成する。そして、差分単位データ列を連結することにより、差分データ列全体を生成する。サイズの大きな同一データ列が多く検出されるほど、差分データ列のサイズを小さくできるのは第１実施例と同様である。また、第１実施例と同様に第２実施例においても、サーバ装置１００は、データサイズ率まで考慮した符号化データ決定処理により差分単位データ列に変換すべき同一データ列を選択する。
【００７５】
第２実施例においては、旧データ列における旧目印領域Ｒｏ内と旧目印領域Ｒｏ外、新データ列（０〜Ｐ＋１）の範囲における新目印領域Ｒｎ内と新目印領域外Ｒｎのそれぞれにおいて最長一致する同一データ列を検出する。同図では、更に、旧データ列の範囲を３つ、新データ列（０〜Ｐ＋１）の範囲を３つに分けている。すなわち、旧目印領域Ｒｏよりも前方のデータ範囲Ａｏ、旧目印領域Ｒｏ内のデータ範囲Ｂｏ、旧目印領域Ｒｏよりも後方のデータ範囲Ｃｏ、新目印領域Ｒｎよりも前方のデータ範囲Ａｎ、新目印領域Ｒｎ内のデータ範囲Ｂｎ、新目印領域Ｒｎよりも後方のデータ範囲Ｃｎの計６つである。同一検索部１４４は、データ範囲Ａｏ、Ｂｏ、Ｃｏ、Ａｎ、Ｂｎ、Ｃｎからそれぞれ同一データ列候補を最大６つ検出する。
【００７６】
データサイズ率算出部１５０は、こうして検出された最大６種類の同一データ列についてのデータサイズ率を計算する。差分データ生成部１４６は、もっともデータサイズ率が小さくなるときの同一データ列について差分単位データ列を生成する。
なお、旧目印領域Ｒｏ内、旧目印領域Ｒｏ外、新目印領域Ｒｎ内、新目印領域Ｒｎ外の４つの範囲から最長一致する同一データ列をそれぞれ検出してもよい。また、６つ全ての同一データ列候補のデータサイズ率を比較するのではなく、順次一つずつ比較してデータサイズ率の小さい方を覚えておき最終的にデータサイズ率の小さいものを選択してもよい。
【００７７】
図１８は、第２実施例における変換データの復元を示す模式図である。
復元側のクライアント端末２００においても、旧目印領域Ｒｏと新目印領域Ｒｎのいずれかが現目印領域Ｒｃとして設定される。復元側においても現目印領域Ｒｃは、新データ列と旧データ列のどちらが「アクティブ」であるかを示す。ここで、読み出した差分データ列が（Ｓｗ）（５，１）であったとする。また、現目印領域Ｒｃ＝旧目印領域Ｒｏであるとする。
クライアント端末２００のアクティブ設定部２３０は現目印領域Ｒｃ＝新目印領域Ｒｎに設定変更し、新たな現目印領域Ｒｃである新目印領域Ｒｎについて、目印領域内位置「１」から５バイト分のデータ列を新データ列として追加する。
【００７８】
一方、読み出した差分データ列が（５，１）であったとする。現目印領域Ｒｃ＝旧目印領域Ｒｏであれば、旧目印領域Ｒｏについて、目印領域内位置「１」から５バイト分のデータ列を新データ列として追加する。アクティブなデータ列の変更が発生するときだけＳｗを挿入すればよいので、２つの目印領域を使い分ける場合でも、第１実施例と比べても差分データ列に対するオーバーヘッドはそれほど大きくならない。
【００７９】
図１９は、第２実施例における差分処理の過程を示すフローチャートである。
まず、旧目印領域設定部１３４は、旧データ列の先頭バイトが旧目印領域Ｒｏの始点位置となるように、旧目印領域Ｒｏを初期設定する（Ｓ６０）。新目印領域設定部１３６は、新データ列の先頭バイトが新目印領域Ｒｎの始点位置となるように、新目印領域Ｒｎを初期設定する（Ｓ６２）。アクティブ設定部１３８は、現目印領域Ｒｃ＝旧目印領域Ｒｏとして初期設定する（Ｓ６４）。検証位置特定部１４２は、新データ列の先頭バイトに検証対象位置Ｐを初期設定する（Ｓ６６）。同一検索部１４４は、検証対象位置Ｐの１バイト分の部分データ列と同じ内容のデータ列を旧データ列全体と新データ列の（０〜Ｐ−１）の範囲を対象として検索する（Ｓ７０）。検出されなければ（Ｓ１７０のＮ）、差分データ生成部１４６は検索対象位置Ｐの新データ列１バイト分を差分単位データ列として取り出して符号化し（Ｓ１７８）、検証対象位置Ｐを１バイトだけ進める（Ｓ１８０）。処理はＳ６８に戻る。新データ列全体について検証が完了すると（Ｓ６８のＹ）、差分データ列の終端を示す「終端マーク（ＥＯＦ）」を挿入する（Ｓ１８２）。新データ列に未検証のデータ範囲が存在するときには（Ｓ６８のＮ）、移動後の検証対象位置Ｐに基づいて、Ｓ７０以降の処理を再実行する。
【００８０】
同一内容のデータ列が検出されると（Ｓ１７０のＹ）、検証位置特定部１４２は、検証対象位置Ｐからの未検証データ列の長さを１バイトずつ延長しながら、一致しなくなるまで同一部分を検索する。そして、同一データ列が検証下限値以上の長さとなるか判定する（Ｓ１７２）。そして検証下限値以上の長さの同一データ列が検出されなければ（Ｓ１７２のＮ）、処理はＳ１８０に移行する。このときにも、差分データ生成部１４６は検証対象位置Ｐの新データ列１バイト分を差分単位データ列として取り出して符号化し（Ｓ１７８）、検証対象位置Ｐを１バイトだけ進める（Ｓ１８０）。このときの処理については図６に関連して説明した内容と同等である。
【００８１】
検証下限値以上のサイズの同一データ列が検出されれば（Ｓ１７２のＹ）、次に、符号化データ決定処理により同一データ列を選択する（Ｓ１７４）。同一データ列の検出位置に基づいて、差分処理部１４０は差分単位生成処理を実行する（Ｓ１７６）。
【００８２】
図２０は、図１９のＳ１７６における差分単位生成処理の詳細を示すフローチャートである。
差分データ生成部１４６は、特定された同一データ列が旧データ列内にあるか新データ列内にあるかを判定する（Ｓ７２）。
【００８３】
Ａ．旧データ列内の場合（Ｓ７２のＹ）：
差分データ生成部１４６は同一データ列の始点位置が旧目印領域Ｒｏ内か否かを判定する（Ｓ７４）。同一データ列の始点位置が旧目印領域Ｒｏ外であれば（Ｓ７４のＮ）、すなわち、旧データ列について目印領域外検出の場合、旧目印領域設定部１３４は、旧目印領域Ｒｏの始点位置と同一データ列の始点位置が一致するように、旧目印領域Ｒｏを調整移動させる（Ｓ７８）。同一データ列の始点位置が旧目印領域Ｒｏ内であれば（Ｓ７４のＹ）、すなわち、旧データ列について目印領域内検出の場合、Ｓ７８の処理はスキップされる。
【００８４】
Ｒｃ＝Ｒｏでなければ（Ｓ７６のＮ）、いいかえれば、新データ列がアクティブのときに旧データ列から同一データ列が検出された場合には、アクティブ設定部１３８はＲｃ＝Ｒｏに設定変更する（Ｓ８０）。現目印領域が変更になったので、差分データ生成部１４６は、差分単位データ列に「Ｓｗ」を記録する（Ｓ８２）。Ｒｃ＝Ｒｏのときには（Ｓ７６のＹ）、Ｓ８０、Ｓ８２の処理は実行しない。差分データ生成部１４６は、現目印領域Ｒｃ＝旧目印領域Ｒｏに対して図７や図８等に関連して説明した処理を実行することにより部分データ列に対応する同一データ列を差分単位データ列に変換する（Ｓ８４）。検証データ列の範囲がＰ〜Ｐ＋ｎであれば、検証開始位置はＰ＋ｎ＋１に移動する（Ｓ９８）。
【００８５】
Ｂ．新データ列内の場合（Ｓ７２のＮ）：
差分データ生成部１４６は同一データ列の始点位置が新目印領域Ｒｎ内か否かを判定する（Ｓ８６）。同一データ列の始点位置が新目印領域Ｒｎ外であれば（Ｓ８６のＮ）、新目印領域設定部１３６は、新目印領域Ｒｎの始点位置と同一データ列の始点位置が一致するように、新目印領域Ｒｎを調整移動させる（Ｓ８８）。同一データ列の始点位置が新目印領域Ｒｎ内であれば（Ｓ８６のＹ）、Ｓ８８の処理はスキップされる。
【００８６】
Ｒｃ＝Ｒｎでなければ（Ｓ９０のＮ）、いいかえれば、旧データ列がアクティブのときに新データ列から同一データ列が検出された場合には、アクティブ設定部１３８はＲｃ＝Ｒｎに設定変更する（Ｓ９２）。現目印領域が変更になったので、差分データ生成部１４６は、差分データ列に「Ｓｗ」を記録する（Ｓ９４）。Ｒｃ＝Ｒｎのときには（Ｓ９０のＹ）、Ｓ９２、Ｓ９４の処理は実行しない。差分データ生成部１４６は、現目印領域Ｒｃ＝新目印領域Ｒｎに対して図７や図８等に関連して説明した処理を実行することにより検証データ列を差分単位データ列に変換する（Ｓ８４）。検証データ列の範囲がＰ〜Ｐ＋ｎであれば、検証開始位置はＰ＋ｎ＋１に移動する（Ｓ９８）。
【００８７】
こうして、新データ列の検証対象位置Ｐを少しずつ移動させながら全体としての差分データ列が生成されることになる。差分処理が進むごとに同一データ列の検出率が向上するため、第１実施例の差分処理以上に差分データ列のサイズを小さくしやすい。
【００８８】
図２１は、第２実施例における復元処理の過程を示すフローチャートである。
まず、旧目印領域設定部２２６は、旧データ列の先頭バイトを始点位置として旧目印領域Ｒｏを初期設定する（Ｓ１１３０）。新目印領域設定部２２８は、新データ列の先頭バイトを始点位置として新目印領域Ｒｎを初期設定する（Ｓ１１３２）。ただし、この段階では新データ列は復元されていないので、新目印領域Ｒｏに含まれるデータは存在しない。アクティブ設定部２３０は、現目印領域Ｒｃ＝旧目印領域Ｒｏに初期設定する（Ｓ１１３３）。読出部２３４は、新データ列の先頭バイトに復元開始位置Ｑを初期設定する（Ｓ１１３４）。
【００８９】
読出部２３４は、差分データ列の一部を読み出す（Ｓ１１３６）。デコード部２３８は、符号化されているこのデータ列をデコードする（Ｓ１１４０）。終端マーク（ＥＯＦ）であれば（Ｓ１１４２のＹ）、復元処理は終了する。終端マークではなく（Ｓ１１４２のＮ）、文字であれば（Ｓ１１４４のＹ）、すなわち、新データ列に含まれるテキストデータが非変換データとして記録されているのであれば、新データ生成部２３６は読み出した１バイト分のデータ列を新データ列に追加する（Ｓ１１４６）。このとき、新データ生成部２３６は、復元開始位置Ｑを１バイト分だけ進める。一方、読み出したデータ列が変換データであって（Ｓ１１４４のＮ）、旧目印領域Ｒｏの移動を示す移動マークＭであれば（Ｓ１１４８のＹ）、さらに差分データ列を読み出してデコードすることで移動位置Mｒを取得する（Ｓ１１５０）。旧目印領域設定部１３４または新目印領域設定部１３６は、現目印領域Ｒｃとして設定されている目印領域をMｒによって示される位置に調整移動させる（Ｓ１１５２）。
【００９０】
Ｓｗであれば（Ｓ１１５４のＹ）、アクティブ設定部２３０は現目印領域を設定変更する（Ｓ１１５６）。Ｓｗでもなければ（Ｓ１１５４のＮ）、読み出されたデータ列と旧データ列に基づいて新データ列を復元する（Ｓ１１５８）。Ｓ１１５８の部分復元処理の詳細については次の図２２に関連して説明する。読み出されたデータ列から復元された新データ列のサイズがＬであれば、復元開始位置はＱ＋Ｌに変更される。このように、終端マークが現れるまで、Ｓ１１４４以降の処理が繰り返され、差分データ列を少しずつ読み出しながら新データ列全体が復元されることになる。いいかえれば、差分単位データ列を基本的な処理単位として、復元処理が実行されている。
【００９１】
図２２は、図２１のＳ１１５８における部分復元処理を詳細に示すフローチャートである。
読出部２３４は、同一サイズＬを読み出し（Ｓ１１６０）、次のデータは、目印領域内位置であるので、差分データを読み出す（Ｓ１１６２）。デコード部２３８はこれを復元する（Ｓ１１６４）。読出部２３４は、復元されたデータから目的領域内位置ｎを取得する（Ｓ１１６６）。新データ生成部２３６は、現目印領域Ｒｃを基準として、（Ｌ，ｎ）から部分的な新データ列を復元する（Ｓ１１６８）。すなわち、新データ生成部２３６は現目印領域Ｒｃ内の位置ｎからＬバイト分のデータ列を取り出して新データ列として追加する。
ここで、Ｌ＝Ｌｍであれば（Ｓ１１７０のＹ）、旧目印領域設定部２２６または新目印領域設定部２２８は現目印領域Ｒｃを上限移動させる（Ｓ１１７２）。
【００９２】
以上、サーバ装置１００およびクライアント端末２００を実施例に基づいて説明した。
第１実施例に示したサーバ装置１００によれば、新データ列に含まれるデータの特徴と旧データ列に含まれるデータの特徴に基づいてコンパクトな差分データ列を生成できる。第２実施例に示したサーバ装置１００によれば、更に、新データ列自体も対象として同一データ列を検出できる。そのため、同一データ列の検出率をいっそう高めることができる。更に、図１１に関連して説明したように、データサイズ減少率を考慮した差分処理を実行することにより、いっそう差分データ列のサイズを小さくできる。
このような差分データ列をクライアント端末２００に送信することにより、クライアント端末２００の旧データ列を適宜・一斉に更新させることができる。
また、本実施例に示した方法によれば、小さな処理負荷にて復元処理を実行できる。クライアント端末２００が、ＣＰＵやメモリ等の計算資源に制約がある携帯電話などの場合、復元処理の処理負荷を抑制することは重要である。クライアント端末２００は、実質的に、旧データ列や新データ列において、差分データ列による指定位置から指定量のデータを抽出したり、目印領域を移動させることにより復元処理を実行するのであって、ソート・比較・検索といった負荷の高い処理や、前の処理を覚えておくような高度な処理を実行する必要がない。
【００９３】
以上、本発明について実施例をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００９４】
請求項に記載の各構成要件が果たすべき機能は、本実施例において示された各機能ブロックの単体もしくはそれらの連係によって実現されることも当業者には理解されるところである。
【００９５】
変形例として、サーバ装置１００は、新データ列全体としてのハッシュ値を生成し、差分データ列に加えてこのハッシュ値をクライアント端末２００に送信してもよい。クライアント端末２００は、差分データ列に基づいて新データ列を復元し、復元した新データ列全体としてのハッシュ値を生成する。クライアント端末２００は、サーバ装置１００から受信したハッシュ値と生成したハッシュ値を比較することにより、正しく復元ができているかを自己判定できる。また、新データ列全体に限らず、所定の一部についてハッシュ値を生成してもよい。
【図面の簡単な説明】
【００９６】
【図１】ネットワークシステムの全体構成図である。
【図２】アップデート処理の概要を説明するための模式図である。
【図３】第１実施例における差分処理の概要を説明するための模式図である。
【図４】サーバ装置の機能ブロック図である。
【図５】第１実施例における差分処理の過程を示すフローチャートである。
【図６】（ａ）「同一なし」時における差分単位データ列の生成方法を示す模式図である。
【図７】（ｂ−１）「目印領域内検出時」における差分単位データ列の生成方法を示す模式図である。
【図８】（ｂ−２）「目印領域外検出時」における差分単位データ列の生成方法を示す模式図である。
【図９】同一データ列のサイズが検証上限値Ｌｍに達するときの処理内容を示す模式図である。
【図１０】図５のＳ１００における処理内容を詳細に示すフローチャートである。
【図１１】第１の実施例における符号化データ決定処理の処理内容を示す模式図である。
【図１２】クライアント端末の機能ブロック図である。
【図１３】復元処理の過程を示すフローチャートである。
【図１４】図１３のＳ１５０における部分復元処理を詳細に示すフローチャートである。
【図１５】図１３のＳ１４２における文字復元処理を説明するための模式図である。
【図１６】図１４における変換データの復元を示す模式図である。
【図１７】第２実施例における差分処理の概要を説明するための模式図である。
【図１８】第２実施例における変換データの復元を示す模式図である。
【図１９】第２実施例における差分処理の過程を示すフローチャートである。
【図２０】図１９のＳ１７６における差分単位生成処理の詳細を示すフローチャートである。
【図２１】第２実施例における復元処理の過程を示すフローチャートである。
【図２２】図２１のＳ１１５８における部分復元処理を詳細に示すフローチャートである。
【符号の説明】
【００９７】
１００  サーバ装置、  １０１  ネットワークシステム、  １１０  通信部、  １１２  データ取得部、  １１４  差分送信部、  １２０  データ処理部、  １３０  目印領域処理部、  １３２  移動設定部、  １３４  旧目印領域設定部、  １３６  新目印領域設定部、  １３８  アクティブ設定部、  １４０  差分処理部、  １４２  検証位置特定部、  １４４  同一検索部、  １４６  差分データ生成部、  １４８  エンコード部、１４９  対象選択部、  １５０  データサイズ率算出部、  １５２  ハッシュ処理部、  １６０  データ保持部、  １６２  旧データ保持部、  １６４  新データ保持部、  １６６  差分データ保持部、  ２００  クライアント端末、  ２１０  通信部、  ２１２  差分受信部、  ２２０  データ処理部、  ２２２  目印領域処理部、  ２２４  移動設定部、  ２２６  旧目印領域設定部、  ２２８  新目印領域設定部、  ２３０  アクティブ設定部、  ２３２  復元部、  ２３４  読出部、  ２３６  新データ生成部、  ２３８  デコード部、  ２４０  データ保持部、  ２４２  旧データ保持部、  ２４４  新データ保持部、  ２４６  差分データ保持部。
【図１】
2008204287.tif 000003
【図２】
2008204287.tif 000004
【図３】
2008204287.tif 000005
【図４】
2008204287.tif 000006
【図５】
2008204287.tif 000007
【図６】
2008204287.tif 000008
【図７】
2008204287.tif 000009
【図８】
2008204287.tif 000010
【図９】
2008204287.tif 000011
【図１０】
2008204287.tif 000012
【図１１】
2008204287.tif 000013
【図１２】
2008204287.tif 000014
【図１３】
2008204287.tif 000015
【図１４】
2008204287.tif 000016
【図１５】
2008204287.tif 000017
【図１６】
2008204287.tif 000018
【図１７】
2008204287.tif 000019
【図１８】
2008204287.tif 000020
【図１９】
2008204287.tif 000021
【図２０】
2008204287.tif 000022
【図２１】
2008204287.tif 000023
【図２２】
2008204287.tif 000024