JP4467965B2 - 差分ファイル作成プログラム及び方法 - Google Patents

差分ファイル作成プログラム及び方法 Download PDF

Info

Publication number
JP4467965B2
JP4467965B2 JP2003409369A JP2003409369A JP4467965B2 JP 4467965 B2 JP4467965 B2 JP 4467965B2 JP 2003409369 A JP2003409369 A JP 2003409369A JP 2003409369 A JP2003409369 A JP 2003409369A JP 4467965 B2 JP4467965 B2 JP 4467965B2
Authority
JP
Japan
Prior art keywords
file
byte
block
difference
matching block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2003409369A
Other languages
English (en)
Other versions
JP2005173726A (ja
Inventor
耕一 平野
修 大島
崇 西村
修二 舘野
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nomura Research Institute Ltd
Original Assignee
Nomura Research Institute Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nomura Research Institute Ltd filed Critical Nomura Research Institute Ltd
Priority to JP2003409369A priority Critical patent/JP4467965B2/ja
Publication of JP2005173726A publication Critical patent/JP2005173726A/ja
Application granted granted Critical
Publication of JP4467965B2 publication Critical patent/JP4467965B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、旧ファイルと、旧ファイルを更新して得られる新ファイルとの差分ファイルを作成するプログラム及び方法に関する。
2つのファイルがどの程度異なるのか、のみならず複数のファイルで構成されているシステム全体として他のシステムとどの程度異なっているかを知るための類似度計測システムが存在する(例えば、特許文献1参照)。
特開2003−216425号公報
従来、2つのファイルの厳密な差分をとる方法として、新ファイルに出現する最長バイト列を旧ファイル全域から探索するLCS(Longest Character Sequence又はLongest Common Sequence)法や、LCS法と等価な機能を持つが、より高速化したSuffix index を使用する方法(例えば、bdiff)や、ハッシュテーブルを使用する方法(例えば、vdelta)などが存在する。
また、厳密差分に比較すると粗い差分をとる方法として、最長一致バイト列ではなく固定長ブロック単位での一致探索を行う方法(例えば、rsyncの亜種)や、最長一致単語をファイル全域ではなくファイルの一部分から局所探索する方法(例えば、LDIFF)などが存在する。
しかし、厳密な差分をとる方法は、差分ファイルのサイズは小さいが、差分ファイルの作成時間が長くなりがちである。一方、ラフな差分をとる方法は、差分ファイル作成時間は短いが、差分ファイルのサイズが大きくなる傾向にある。
そこで、本発明は、ラフな差分をとる方法に近い処理時間で、厳密な差分を取る方法を採用した場合に近いサイズの差分ファイルを抽出可能なプログラム、方法及び装置を提供することを目的とする。
本発明の第1の特徴は、差分ファイル作成プログラムであって、コンピュータに
(1)第1のファイルをそれぞれがmバイトである第1,第2,第3,・・・第nの複数のブロックに分割する手順と、
(2)第2のファイルのrバイト目から(r+m−1)バイト目までを第1のファイルの複数のブロックのそれぞれと比較する手順と、
(3)第2のファイルのrバイト目から(r+m−1)バイト目までが第1のファイルの複数のブロックのいずれかと一致する場合は、
(3−1)一致するブロックの第1のファイルにおける位置を特定可能な情報を差分ファイルに記録するブロック位置記録手順と、
(3−2)第2のファイルの(r+m)バイト目から(r+2*m−1)バイト目までを第1のファイルの複数のブロックとの新たな比較対象とする手順と、
(4)第2のファイルのrバイト目から(r+m−1)バイト目までが第1のファイルのブロックのいずれとも一致しない場合は、
(4−1)rバイト目のデータを差分ファイルに記録する手順と、
(4−2)第2のファイルの(r+1)バイト目から(r+m)バイト目までを第1のファイルの複数のブロックとの新たな比較対象とする手順と、を実行させることにある(m,n及びrは自然数)。
かかる特徴によって、第2のファイルのrバイト目から(r+m−1)バイト目までが第1のファイルのいずれかのブロックと一致する場合は、第2のファイルの(r+m)バイト目から(r+2*m−1)バイト目までが第1のファイルのいずれかのブロックと一致するかを調べる。一方、第2のファイルのrバイト目から(r+m−1)バイト目までが第1のファイルのいずれのブロックとも一致しない場合は、第2のファイルの(r+1)バイト目から(r+m)バイト目まで第1のファイルのいずれかのブロックと一致するかを調べる。
かかる手順を繰り返すことによって、第2のファイルに関して、第1のファイルのいずれかのブロックと一致するブロック、及び第1のファイルのいずれのブロックとも一致しない部分を明確にする。
本発明の第2の特徴は、(1)第1のファイルを複数のブロックに分割する手順は、各ブロックのチェックサムが記録されたチェックサムテーブルを作成する手順を、
(2)第1のファイルのブロックと比較する手順は、第2のファイルのrバイト目から(r+m−1)バイト目までのチェックサム値を、既に作成してあるチェックサムテーブル内の各チェックサム値と比較する手順を、含むことにある。
本発明の第3の特徴は、さらにブロック位置記録手順が、第2のファイルのrバイト目から(r+m−1)バイト目までが、第1のファイルのpバイト目から(p+m−1)バイト目までのブロックと一致する場合に、
一致ブロックの開始位置を示すpバイト目とブロックサイズを示すmバイト、又は
pバイト目と一致ブロックの終了位置を示す(p+m−1)バイト目
を差分ファイルに記録する手順を、さらに含むことにある(pは自然数)。
かかる特徴によって、第2のファイル中に存在する一致ブロックが、第1のファイル中のどのブロックと一致するかを記録する。
本発明の第4の特徴は、ブロック位置記録手順が、
(1)第2のファイルのrバイト目から(r+m−1)バイト目までが、第1のファイルのpバイト目から(p+m−1)バイト目までのブロックと一致する場合に、
(1−1)第1のファイルにおける一致ブロックの開始位置を示すpバイト目を、第1の一時記憶領域に、
(1−2)ブロックサイズを示すmバイト、又は第1のファイルにおける一致ブロックの終了位置を示す(p+m−1)バイト目を、第2の一時記憶領域に記憶し、
(2)第2のファイルの(r+m)バイト目から(r+2*m−1)バイト目までが、第1のファイルの(p+m)バイト目から(p+2*m−1)バイト目までのブロックと一致する場合に、第2の一時記憶領域に記憶されている
(2−1)mバイトにmバイトを加算、又は
(2−2)(p+m−1)バイトにmバイトを加算する手順を繰り返し、
(3)第2のファイルの(r+s*m)バイト目から(r+(s+1)*m−1)バイト目までが第1のファイルのいずれのブロックとも一致しない場合に、
(3−1)第1の一時記憶領域に記憶されているpバイト目と、
(3−2)第2の一時記憶領域に記憶されている
発見された一致ブロックのブロックサイズの合計を示す(m*s)バイト又は
最後に発見された一致ブロックの終了位置を示す(p+m*s−1)バイト目
とを差分ファイルに記録する手順を、さらに含むことにある(sは自然数)。
かかる特徴によって、一致ブロックが連続して存在する場合に、最初の一致ブロック、次の一致ブロック、さらにその次の一致ブロック・・・など各ブロックの位置を特定可能な情報を逐一記録するのではなく、連続するブロックの最初のブロックと最後のブロックの位置を特定可能な情報を記録する。
本発明の第5の特徴は、
(1)第2のファイルのrバイト目から(r+m−1)バイト目までが、第1のファイルのブロックのいずれとも一致しない場合に、rバイト目のデータを第3の一時記憶領域に記憶し、
(2)第2のファイルの(r+1)バイト目から(r+m)バイト目までが、第1のファイルのブロックのいずれとも一致しない場合に、(r+1)バイト目のデータを第3の一時記憶領域に追加記憶する手順を繰り返し、
(3)第2のファイルの(r+t)バイト目から(r+t+m−1)バイト目までが、第1のファイルのブロックのいずれかと一致する場合に、第3の一時記憶領域に記憶されているrバイト目から(r+t+m−1)バイト目までのデータを差分ファイルに記録することにある(tは自然数)。
かかる特徴によって、一致ブロックが発見されない間は第2のファイルのrバイト目のデータ、(r+1)バイト目のデータ、・・・の各データが一時記憶領域に順次記憶され、(r+t)バイト目を先頭とする一致ブロックが発見された時に、それまで一時記憶領域に蓄積されていた記憶内容が差分ファイルに記録される。
本発明の第6の特徴は、
(1)tがブロックサイズの第1の所定倍数値以上若しくは第1の所定倍数値より大又は第2の所定倍数値以下若しくは第2の所定倍数値未満である場合は、第3の一時記憶領域に記憶されているrバイト目から(r+t+m−1)バイト目までのデータを
(2)tがブロックサイズの第1の所定倍数値以上若しくは第1の所定倍数値より大又は第2の所定倍数値以下若しくは第2の所定倍数値未満でない場合は、第3の一時記憶領域に記憶されているrバイト目から(r+t+m−1)バイト目までのデータと第1のファイルとの厳密差分を、差分ファイルに記録することにある。
かかる特徴によって、不一致部分の長さを示すtの値が、ブロックサイズに比べて大きすぎる場合、又は小さすぎる場合には、一時記憶領域に記憶されているデータをそのまま差分ファイルに記録し、不一致部分の長さを示すtの値が、ブロックサイズに比べて大きすぎない場合、又は小さすぎない場合には、厳密差分を差分ファイルに記録する。
本発明の第7の特徴は、直前の一致ブロックと現在の一致ブロックとが、第1のファイルにおいて
(1)連続するブロックである場合は、第3の一時記憶領域に記憶記憶されているrバイト目から(r+t+m−1)バイト目までのデータを
(2)連続するブロックでない場合は、第3の一時記憶領域に記憶されているrバイト目から(r+t+m−1)バイト目までのデータと第1のファイルとの厳密差分を、差分ファイルに記録することにある。
つまり、第2のファイルにおいて不一致部分の前に存在する一致ブロックと後ろに存在する一致ブロックが、第1のファイルにおいて連続するブロックである場合は、厳密差分をとらない。
本発明の第8の特徴は、直前の一致ブロックと現在の一致ブロックとの、第1のファイルにおける出現順序と第2のファイルにおける出現順序とが、
(1)逆転している場合は、第3の一時記憶領域に記憶記憶されているrバイト目から(r+t+m−1)バイト目までのデータを
(2)逆転していない場合は、第3の一時記憶領域に記憶されているrバイト目から(r+t+m−1)バイト目までのデータと第1のファイルとの厳密差分を、差分ファイルに記録することにある。
つまり、第2のファイルにおいて不一致部分の前に存在する一致ブロックをブロックAとし、後ろに存在する一致ブロックをブロックBとする場合に、第1のファイルにおいてブロックBがブロックAの前に位置する場合は、厳密差分をとらない。
本発明の第9の特徴は、直前の一致ブロックが、第1のファイルにおいては現在の一致ブロックの後方に存在するが、2つ前の一致ブロックは、第1のファイルにおいても現在の一致ブロックの前方に存在する場合に、
2つ前の一致ブロックの直後から現在の一致ブロックの直前までを不一致部分とみなすことにある。この場合、1つ前の一致ブロックは、不一致部分の一部とみなされる。
本発明の第10の特徴は、現在の一致ブロックから前方向の所定距離内に複数の一致ブロックが存在し、複数の一致ブロック内に、第1のファイル内においても現在の一致ブロックの前方に存在する両ファイル内前方一致ブロックが存在する場合に、
両ファイル内前方一致ブロックの直後から現在の一致ブロックの直前までを不一致部分とみなすことにある。この場合、第2のファイルにおいて、両ファイル内前方一致ブロックと現在の一致ブロックとの間に存在する一致ブロックは、不一致部分の一部とみなされる。
本発明の第11の特徴は、第2のファイル内において一致ブロックが発見された場合であって、直前の不一致部分の長さが閾値未満又は閾値以下である場合は、一致ブロックとして処理せず、不一致部分として処理することにある。
本発明の第12の特徴は、ブロックサイズが、第2のファイルにおける直前の一致ブロックと、第2のファイルにおける現在の一致ブロックとの間に、第1のファイルにおいて存在する1又は2以上のブロックのブロックサイズの合計値であることにある。
本発明の特徴によれば、差分ファイの生成プログラム及び方法は、ブロック単位のラフな差分抽出の「差分ファイル作成速度が高速」という長所と、厳密差分の「差分ファイルのサイズが小さい」という長所を兼ね備えることが可能である。
以下に詳述するよう、本発明の実施例においては、旧ファイルと新ファイルとを基に、両ファイルの差分ファイルを作成する。差分ファイルには、新ファイルと旧ファイルとではどこがどのように違うかに関する情報が書かれている。このため、旧ファイルと差分ファイルがあれば、新ファイルを作成することができる。
図1は、実施例1〜3の差分ファイル作成装置の構成を示す。まず、各実施例に共通な部分について説明する。その後、各実施例の特徴的な部分について説明する。図1に示すように、実施例1〜3の差分ファイル作成装置3は、送信部10と、演算処理装置(CPU)20と、記憶部30とを備える。
送信部10は、インターネット等の通信網40を介してリモートサイト50へ差分ファイルを送信する。CPU20は、各種プログラムが示す手順に従って新旧ファイルからデータを読み取り、差分ファイルを作成する。
記憶部30は、旧ファイル、新ファイル、差分ファイル、ブロックバイナリ差分抽出プログラム(ブロック差分抽出プログラム)、厳密バイナリ差分抽出プログラム(厳密差分抽出プログラム)、ハイブリッド差分抽出プログラム、過去の成績情報、デフォルトパラメータテーブル、チェックサムテーブル、旧ファイルオフセット、新ファイルオフセットなどを記憶し、またブロックバイト数一時記憶領域、不一致部分一時記憶領域などを有する。また、図示しない、BIOS、オペレーティングシステム(OS)、差分ファイル送信プログラムなども記憶する。記憶部30は、リードオンリーメモリー(ROM)、ランダムアクセスメモリ(RAM)、ハードディスクドライブ(HDD)などから構成される。
ハイブリッド差分抽出プログラムとは、rsyncなどのブロック差分抽出プログラムとbdiffやvdeltaなどの厳密差分抽出プログラムとを適宜使い分けることによって、できるだけ小さな差分ファイルをできるだけ短時間に作成するためのプログラムである。
過去の成績情報とは、かかるハイブリッド差分抽出プログラムを用いて差分ファイルを過去に作成した際の条件や結果を記録したものである。例えば、そのプログラムを実行した時刻、旧ファイルの名前、新ファイルの名前、旧ファイルのサイズ、新ファイルのサイズ、差分ファイルのサイズ、圧縮後差分ファイルのサイズ、実行時間、実行パラメータなどである。
デフォルトパラメータテーブルとは、過去の成績情報が存在しない場合などに、予め定めた振り分け条件から、各実行パラメータを決定するために必要な情報が書かれたテーブルである。
図2は、自己チューニング機能付き差分抽出処理の全体の流れを示す。ステップS10では、過去の成績情報を取得する。ステップS20では、対象ファイル情報を取得し、実行パラメータを自動的に設定する。過去の成績情報を取得できた場合は、過去の成績情報とデフォルトパラメータテーブルに基づいて、最適な実行パラメータを探索する。過去の成績情報を取得できなかった場合は、デフォルトパラメータテーブルに基づいて、実行パラメータを設定する。ステップS30では、差分抽出主処理を行う。ステップS40では、成績情報を保存する。
図3は、対象ファイル情報の取得と実行パラメータ自動設定の流れを示す。ステップS21では、対象ファイルの情報を取得する。ステップS22では、過去成績情報を探索する。ステップS23では、対象ファイル情報と類似のファイル情報がある場合はステップS24へ進み、そうでない場合はステップS25へ進む。ステップS24では、該当過去成績情報のパラメータを、実行パラメータとしてセットする。該当過去成績情報とは、対象ファイル情報と類似のファイル情報を意味する。ステップS25では、デフォルト値テーブルに記憶されているパラメータ値を、実行パラメータとしてセットする。
図4は、デフォルト値テーブルの一例を示す。図4の例では、ファイル拡張子と新ファイルのサイズを振り分け条件としている。ファイル拡張子が、gz, zip, Z, LZH, jarなどの場合は、差分抽出に適さないことを示す。また、ファイル拡張子が、exe, lib, bin, class, dllなどであって、かつ新ファイルのサイズが100メガバイト(MB)より大の場合は、ブロックバイナリ差分抽出Onlyパラメータ値をNo、厳密バイナリ差分抽出Onlyパラメータ値をNo、ブロック長を2000バイト(B)、厳密差分切り取りサイズを40000バイト、厳密差分適用上限サイズ比(新ファイル:旧ファイル)を3とすることを示す。
厳密差分切り取りサイズとは、本発明の第11の特徴として述べた、第2のファイル内において一致ブロックが発見された場合であって、直前の不一致部分の長さが閾値未満又は閾値以下である場合は、一致ブロックとして処理せず、不一致部分として処理する場合の外部から設定可能な閾値のことで、厳密差分をとる際の比較するファイル断片の大きさを調節するためのパラメータである。この閾値を大きくすれば、厳密差分の対象となるファイルの断片は大きくなり、小さくすれば断片は小さくなる。このパラメータを調整することによってファイルの変更の性質(例えば、一部広い範囲で非常に細かい修正がある場合などは、このパラメータを大きくすると効果が高い場合がある)に最適な差分抽出をすることができる。
厳密差分適用上限サイズ比とは、本発明の第6の特徴として述べた、不一致部分の長さを示すtの値が、ブロックサイズに比べて大きすぎる場合、又は小さすぎる場合には、一時記憶領域に記憶されているデータをそのまま差分ファイルに記録し、不一致部分の長さを示すtの値が、ブロックサイズに比べて大きすぎない場合、又は小さすぎない場合には、厳密差分を差分ファイルに記録するときの判断基準となるサイズ比のことで、調節可能なパラメータである。ファイルの変更の性質により、このパラメータを調節することで、最適な差分抽出をすることができる。
図5は、差分抽出主処理の流れを示す。ステップS31では、差分抽出適正のパラメータ値がある場合はステップS32へ進み、差分抽出適正のパラメータ値がない場合は処理を終了する。
ステップS32では、ブロックバイナリ差分抽出Onlyパラメータ値がTrueである場合はステップS34へ進み、そうでない場合はステップS33へ進む。
ステップS33では、厳密バイナリ差分抽出Onlyパラメータ値がTrueである場合はステップS35へ進み、そうでない場合はステップS100へ進む。
ステップS34では、rsyncなどを用いてブロックバイナリ差分抽出処理が行われる。ステップS35では、bdiffやvdeltaなどを用いてブロックバイナリ差分抽出処理が行われる。ステップS100では、ハイブリッド差分抽出処理が行われる。ハイブリッド差分抽出処理については、実施例1〜3に分けて説明する。実施例1〜3は、ハイブリッド差分抽出処理中の「一致ブロック発見時処理」が相違する。
(ハイブリッド差分抽出処理)
まず、各変数を設定する。変数には、新ファイルにおけるOffset、旧ファイルにおける不一致部分の開始位置、新ファイルにおいて発見されたブロックと同じブロックの旧ファイルにおける先頭バイトなどが含まれる。
以下の処理の概要を説明する。まず、旧ファイルを複数の固定長のブロックに分割する。ブロックの長さは、特に限定されない。差分を取る対象である旧ファイル、新ファイルの種類に応じて決めても良い。例えば、実行ファイルなどであればブロックの長さを2000バイトとし、テキストファイルなどであれば200バイトとし、データベースファイルであれば1024バイトとする。また、旧ファイル、新ファイルのバイト数に応じて決めても良い。
旧ファイルのブロックと新ファイルのブロックは長さを等しくする。例えば、旧ファイルのブロックの長さを1000バイトとしたら、新ファイルのブロックの長さも1000バイトとする。
次に、旧ファイル中のブロックのいずれかと同じブロックが、新ファイル中に存在する場合は、旧ファイル中のどのブロックと同じであるかを特定できる情報を差分ファイルに出力する。
「旧ファイル中のどのブロックと同じであるかを特定できる情報」とは、例えば、
(1)旧ファイル中にも存在するブロックの先頭バイトが旧ファイルの先頭から数えて何バイト目かを示すバイト数、
(2)旧ファイル中の各ブロックのそれぞれに番号が付与されている場合は、そのブロックの番号、などである。
旧ファイル中のいずれのブロックとも一致しない部分は、その部分のデータを差分ファイルに出力する。
例えば、1ブロックを3バイトとし、1バイトを英字半角1文字で、1ブロックを英字半角3文字で示す。
図6(a)に旧ファイルの一例を、図(b)に新ファイルの一例を、図6(c)に実施例1にかかる差分ファイルを、図6(d)〜(e)に後述する実施例2〜3にかかる差分ファイルを、それぞれ示す。
まず、新ファイルの1〜3バイトを旧ファイルのAAAブロック、BBBブロック、CCCブロックなどの各ブロックと比較する。新ファイルの1〜3バイトは、旧ファイルの1〜3バイトと同じである。よって、差分ファイルに、AAAブロックの先頭バイトが旧ファイルの先頭から1バイト目であることを書き込むか、またはAAAブロックが旧ファイルの第1ブロックであることを書き込む。
なお、図6(a)に示す旧ファイルは、1〜3バイトは全てA、4〜6バイトは全てBというように、各ブロックの中身が同じであるが、これは単に説明の都合上そうしているに過ぎない。例えば、ブロック長を8バイトとし、AAABBBCCなどのように中身が同じでないまとまりを一つのブロックとしても良い。
次に、新ファイルの4〜6バイトを各ブロックと比較する。新ファイルの4〜6バイトは、旧ファイルのいずれのブロックとも一致しないので新ファイルの4バイト目のデータ"Y"が差分ファイルに書き込まれる。
一致ブロックが発見されたらすぐに、一致ブロックに関するデータを差分ファイルに書き込むとしても良いが、一致ブロックに関するデータを差分ファイルに書き込むタイミングは、特に限定されない。同様に、不一致部分に関するデータを書き込むタイミングも特に限定されない。
図7はハイブリッド差分抽出処理の流れを示すフローチャートであり、図8は実施例1における一致ブロック発見時処理の流れを示すフローチャートである。
図7及び図8に沿って、実施例1におけるハイブリッド差分抽出処理の内容を具体的に説明する。
ステップS101:各変数が設定される。
ステップS102:旧ファイルの各ブロックのチェックサムテーブルAが作成される。
ステップS103:新ファイルのOffsetに「1」が入力される。
(新ファイルのOffset=1バイト)
ステップS112:新ファイルの1〜3バイト(AAA)のチェックサムは、チェックサムテーブル内に発見され、YESに分岐する。図8に示す一致ブロック発見時処理を開始する。
ステップS201:直前は不一致部分ではないので、NOに分岐する。
ステップS202:直前は一致ブロックではないから、NOに分岐する。
ステップS203:発見ブロック、つまり一致ブロック(AAA)の旧ファイルにおける先頭位置(1バイト目)を差分ファイルに出力する。図6(c)に示すように、差分ファイルの先頭に「1」が書き込まれる。
ステップS204:ブロックバイト数(3バイト)をブロックバイト数一時記憶領域に出力する。
ステップS205:新ファイルのOffset(1バイト)にブロックサイズ(3バイト)を加える。新ファイルのOffsetは、4バイトになる。
一致ブロック発見時処理を終了する。
図7に示すループの最後に到達したので、ループの先頭に戻る。
(新ファイルのOffset=4バイト)
ステップS111:新ファイルの4〜6バイトのチェックサムを算出する。
ステップS112:新ファイルの4〜6バイト(YZB)のチェックサムは、チェックサムテーブル内にて発見されないので、NOに分岐する。
ステップS113:直前は一致ブロックであるから、YESに分岐する。
ステップS114:ブロックバイト数一時記憶領域の値(3バイト)を差分ファイルに出力する。図6(c)に示すように、差分ファイルの「1」の後ろに「3」が書き込まれる。
ステップS115:新ファイルのOffset(4バイト)の内容(Y)を不一致部分一時記憶領域に出力する。
ステップS116:新ファイルのOffset(4バイト)に1バイトを加える。新ファイルのOffsetは、5バイトになる。
図7に示すループの最後に到達したので、ループの先頭に戻る。
(新ファイルのOffset=5バイト)
ステップS112:新ファイルの5〜7バイト(ZBB)のチェックサムは、チェックサムテーブル内にて発見されないので、NOに分岐する。
ステップS113:直前は一致ブロックではないので、NOに分岐する。
ステップS115:新ファイルのOffset(5バイト目)の内容(Z)を不一致部分一時記憶領域に出力する。
ステップS116:新ファイルのOffset(5バイト)に1バイトを加える。新ファイルのOffsetは、6バイトになる。
図7に示すループの最後に到達したので、ループの先頭に戻る。
(新ファイルのOffset=6バイト)
ステップS112:新ファイルの6〜8バイト(BBB)のチェックサムは、チェックサムテーブル内にて発見されるので、YESに分岐する。一致ブロック発見時処理を開始する。
ステップS201:直前は不一致部分なので、YESに分岐する。
なお、直前が不一致部分である場合に、所定条件下で発見された一致ブロックを不一致部分とみなすとしても良い。所定条件には、直前の不一致部分の長さが閾値d以下又は閾値d未満であることが含まれる。そして、直前の不一致部分の長さが閾値d以下又は閾値d未満である場合は、「一致ブロック発見時処理」を中止し、ステップS115へ進み、不一致部分が続いているものとして処理する。一方、直前の不一致部分の長さが閾値d以上又は閾値dより大である場合は、「一致ブロック発見時処理」を継続し、ステップ211へ進む。
例えば、所定条件は直前の不一致部分が閾値d以下、閾値dは3バイト、とする。すると、新ファイルのOffsetが6バイトである時に、一致ブロックBBBが発見され、直前の不一致部分YZが3バイト以下であるから、ステップS115へ進み、新ファイルの6バイト目のBが不一致部分一時記憶領域に追加出力される。
ステップS211:不一致部分に関する情報であることを示す識別子(例えば、−1)と共に、不一致部分のバイト数(2バイト)を差分ファイルに出力する。図6(c)に示すように、差分ファイルの「1,3」の後ろに「−2」が書き込まれる。
ステップS212:不一致部分一時記憶領域の内容(YZ)を差分ファイルに出力する。図6(c)に示すように、差分ファイルの「1,3,−2」の後ろに「YZ」が書き込まれる。
ステップS223:発見ブロック(BBB)の旧ファイルでのOffset(4バイト)を差分ファイルに出力する。図6(c)に示すように、差分ファイルの「1,3,−2,YZ」の後ろに「4」が書き込まれる。
ステップS204:ブロックバイト数(3バイト)をブロックバイト数一時記憶領域に加算する。ブロックバイト数一時記憶領域の値は、0バイトから3バイトに増加する。
ステップS205:新ファイルのOffset(6バイト)にブロックサイズ(3バイト)を加えて、新ファイルの新たなOffset(9バイト)とする。
一致ブロック発見時処理を終了する。
図7に示すループの最後に到達したので、ループの先頭に戻る。
(新ファイルのOffset=9バイト)
ステップS112:新ファイルの9〜11バイト(CCC)のチェックサムは、チェックサムテーブル内にて発見されるので、YESに分岐する。一致ブロック発見時処理を開始する。
ステップS201:直前は不一致部分ではないので、NOに分岐する。
ステップS202:直前は一致ブロックであるから、YESに分岐する。
ステップS221:直前の一致ブロックと現在の一致ブロックとは旧ファイルにおいて連続するから、YESに分岐する。
ここで、「現在の一致ブロック」とは、新ファイルにおけるOffsetが先頭バイトとなっている一致ブロックを言う。「直前の一致ブロック」とは、現在の一致ブロックが発見される直前に発見された一致ブロックを言う。
具体的には、新ファイルにおけるOffsetが6バイト目である場合、現在の一致ブロックとは6〜8バイトのブロック(BBB)のことであり、直前の一致ブロックとは1〜3バイトのブロック(AAA)のことである。
また、新ファイルにおけるOffsetが9バイト目である場合、現在の一致ブロックとは9〜11バイトのブロック(CCC)のことであり、直前の一致ブロックとは6〜8バイトのブロック(BBB)のことである。
「直前の一致ブロックと現在の一致ブロックとが旧ファイルにおいて連続?」とは、直前の一致ブロックと現在の一致ブロックとが旧ファイルにおいて連続するブロックか否かということを意味する。
具体的には、新ファイルにおけるOffsetが6バイト目である場合、現在の一致ブロック(BBB)と、直前の一致ブロック(AAA)とは、旧ファイルにおいて連続している。
一方、新ファイルにおけるOffsetが22バイト目である場合、現在の一致ブロック(22〜24バイトのブロックIII)と、直前の一致ブロック(9〜11バイトのブロックCCC)とは、旧ファイルにおいて連続していない。
ステップS204:ブロックバイト数(3バイト)をブロックバイト数一時記憶領域に加算する。ブロックバイト数一時記憶領域の値は、6バイトになる。
ステップS205:新ファイルのOffset(9バイト)にブロックサイズ(3バイト)を加算する。新ファイルのOffsetは、12バイトになる。
一致ブロック発見時処理を終了する。
図7に示すループの最後に到達したので、ループの先頭に戻る。
(新ファイルのOffset=12バイト)
ステップS112:新ファイルの12〜14バイト(DXD)のチェックサムは、チェックサムテーブル内にて発見されないので、NOに分岐する。
ステップS113:直前は一致ブロックであるから、YESに分岐する。
ステップS114:ブロックバイト数一時記憶領域の値(6バイト)を差分ファイルに出力する。図6(c)に示すように、差分ファイルの「1,3,−2,YZ,4」の後ろに「6」が書き込まれる。
ステップS115:新ファイルのOffset(12バイト目)の内容(D)を不一致部分一時記憶領域に出力する。
ステップS116:新ファイルのOffset(12バイト)に1バイトを加算する。新ファイルのOffsetは、13バイトになる。
図7に示すループの最後に到達したので、ループの先頭に戻る。
(新ファイルのOffset=13〜21バイト)
ステップS112:新ファイルの13〜15バイト(XDE)のチェックサムは、チェックサムテーブル内にて発見されないので、NOに分岐する。
ステップS113:直前は一致ブロックではないから、NOに分岐する。
ステップS115:新ファイルのOffset(13バイト目)の内容(X)を不一致部分一時記憶領域に出力する。
ステップS116:新ファイルのOffset(13バイト)に1バイトを加算する。新ファイルのOffsetは、14バイトになる。
図7に示すループの最後に到達したので、ループの先頭に戻る。
以下、同様に、
新ファイルの14〜16バイト(DEX)のチェックサムはチェックサムテーブル内に発見されないので、先頭1バイト(D)を不一致部分一時記憶領域に出力する。
新ファイルの15〜17バイト(EXE)のチェックサムはチェックサムテーブル内に発見されないので、先頭1バイト(E)を不一致部分一時記憶領域に出力する。
新ファイルの16〜18バイト(XEF)のチェックサムはチェックサムテーブル内に発見されないので、先頭1バイト(X)を不一致部分一時記憶領域に出力する。
新ファイルの17〜19バイト(EFX)のチェックサムはチェックサムテーブル内に発見されないので、先頭1バイト(E)を不一致部分一時記憶領域に出力する。
新ファイルの18〜20バイト(FXX)のチェックサムはチェックサムテーブル内に発見されないので、先頭1バイト(F)を不一致部分一時記憶領域に出力する。
新ファイルの19〜21バイト(XXF)のチェックサムはチェックサムテーブル内に発見されないので、先頭1バイト(X)を不一致部分一時記憶領域に出力する。
新ファイルの20〜22バイト(XFI)のチェックサムはチェックサムテーブル内に発見されないので、先頭1バイト(X)を不一致部分一時記憶領域に出力する。
新ファイルの21〜22バイト(FII)のチェックサムはチェックサムテーブル内に発見されないので、先頭1バイト(F)を不一致部分一時記憶領域に出力する。
(新ファイルのオフセット=22バイト)
ステップS112:新ファイルの22〜24バイト(III)のチェックサムは、チェックサムテーブル内にて発見されるので、YESに分岐する。一致ブロック発見時処理を開始する。
ステップS201:直前は不一致部分であるから、YESに分岐する。
ステップS211:不一致部分に関する情報であることを示す識別子(例えば、−1)と共に、不一致部分のバイト数(つまり、12バイト目のDから21バイト目のFまでの10バイト)を差分ファイルに出力する。図6(c)に示すように、差分ファイルの「1,3,−2,YZ,4,6」の後ろに「−10」が書き込まれる。
ステップS212:不一致部分一時記憶領域の内容(つまり、DXDEXEFXXF)を差分ファイルに出力する。図6(c)に示すように、差分ファイルの「1,3,−2,YZ,4,6,−10」の後ろに「DXDEXEFXXF」が書き込まれる。
ステップS223:発見ブロック(III)の旧ファイルでのOffset(25バイト)を差分ファイルに出力する。図6(c)に示すように、差分ファイルの「1,3,−2,YZ,4,6,−10,DXDEXEFXXF」の後ろに「25」が書き込まれる。
ステップS204:ブロックバイト数(3バイト)をブロックバイト数一時記憶領域に加算する。ブロックバイト数一時記憶領域の値は、3バイトになる。
ステップS205:新ファイルのOffset(22バイト)にブロックサイズ(3バイト)を加算する。新ファイルのOffsetは、25バイトになる。
一致ブロック発見時処理を終了する。
図7に示すループの最後に到達したので、ループの先頭に戻る。
(新ファイルのオフセット=25バイト)
ステップS112:新ファイルの25〜27バイト(HXH)のチェックサムは、チェックサムテーブル内にて発見されないので、NOに分岐する。
ステップS113:直前は一致ブロックであるから、YESに分岐する。
ステップS114:ブロックバイト数一時記憶領域の値(3バイト)を差分ファイルに出力する。図6(c)に示すように、差分ファイルの「1,3,−2,YZ,4,6,−10,DXDEXEFXXF,25」の後ろに「3」が書き込まれる。
ステップS115:新ファイルのOffset(25バイト)の内容(H)を不一致部分一時記憶領域に出力する。
ステップS116:新ファイルのOffset(25バイト)に1バイトを加算する。新ファイルの新たなOffsetは、26バイトになる。
図7に示すループの最後に到達したので、ループの先頭に戻る。
(新ファイルのOffset=26〜27バイト)
ステップS112:新ファイルの26〜28バイト(XHG)のチェックサムは、チェックサムテーブル内にて発見されないので、NOに分岐する。
ステップS113:直前は一致ブロックではないので、NOに分岐する。
ステップS115:新ファイルのOffset(26バイト)の内容(X)を不一致部分一時記憶領域に出力する。
同様に、新ファイルの27〜29バイト(HGG)のチェックサムはチェックサムテーブル内に発見されないので、先頭1バイト(H)を不一致部分一時記憶領域に出力する。
(新ファイルのOffset=28バイト)
ステップS112:新ファイルの28〜30バイト(GGG)のチェックサムは、チェックサムテーブル内にて発見されるので、YESに分岐する。一致ブロック発見時処理を開始する。
ステップS201:直前は不一致部分であるから、YESに分岐する。
ステップS211:不一致部分に関する情報であることを示す識別子(例えば、−1)と共に、不一致部分のバイト数(つまり、25バイト目のHから27バイト目のHまでの3バイト)を差分ファイルに出力する。図6(c)に示すように、差分ファイルの「1,3,−2,YZ,4,6,−10,DXDEXEFXXF,25,3」の後ろに「−3」が書き込まれる。
ステップS212:不一致部分一時記憶領域の内容(つまり、HXH)を差分ファイルに出力する。図6(c)に示すように、差分ファイルの「1,3,−2,YZ,4,6,−10,DXDEXEFXXF,25,3,−3」の後ろに「HXH」が書き込まれる。
ステップS223:発見ブロックの旧ファイルでのOffset(19バイト)を差分ファイルに出力する。図6(c)に示すように、差分ファイルの「1,3,−2,YZ,4,6,−10,DXDEXEFXXF,25,3,−3,HXH」の後ろに「19」が書き込まれる。
ステップS204:ブロックバイト数(3バイト)をブロックバイト数一時記憶領域に出力する。ブロックバイト数一時記憶領域の値は、3バイトになる。
ステップS205:新ファイルのOffset(28バイト)にブロックサイズ(3バイト)を加算する。新ファイルのOffsetは、31バイトになる。
一致ブロック発見時処理を終了する。
図7に示すループの最後に到達したので、ループの先頭に戻る。
(新ファイルのOffset=31バイト)
ステップS112:新ファイルの31〜33バイト(JJJ)のチェックサムは、チェックサムテーブル内にて発見されるので、YESに分岐する。一致ブロック発見時処理を開始する。
ステップS201:直前は不一致部分ではないので、NOに分岐する。
ステップS202:直前は一致ブロックであるから、YESに分岐する。
ステップS221:直前の一致ブロックと現在の一致ブロックとは旧ファイルにおいて連続しないので、NOに分岐する。
ステップS222:ブロックバイト数一時記憶領域の値(3バイト)を差分ファイルに出力する。図6(c)に示すように、差分ファイルの「1,3,−2,YZ,4,6,−10,DXDEXEFXXF,25,3,−3,HXH,19」の後ろに「3」が書き込まれる。
ステップS223:発見ブロック(JJJ)の旧ファイルでのOffset(28バイト)を差分ファイルに出力する。図6(c)に示すように、差分ファイルの「1,3,−2,YZ,4,6,−10,DXDEXEFXXF,25,3,−3,HXH,19,3」の後ろに「28」が書き込まれる。
ステップS204:ブロックバイト数をブロックバイト数一時記憶領域に出力する。ブロックバイト数一時記憶領域の値は、3バイトになる。
ステップS205:新ファイルのOffset(31バイト)にブロックサイズ(3バイト)を加算する。新ファイルのOffsetは、34バイトになる。
一致ブロック発見時処理を終了する。
図7に示すループの最後に到達したので、ループの先頭に戻る。
(新ファイルのOffset=34バイト)
ステップS112:新ファイルの34〜36バイト(KKK)のチェックサムは、チェックサムテーブル内にて発見されるので、YESに分岐する。一致ブロック発見時処理を開始する。
ステップS201:直前は不一致部分ではないので、NOに分岐する。
ステップS202:直前は一致ブロックであるから、YESに分岐する。
ステップS221:直前の一致ブロック(JJJ)と現在の一致ブロック(KKK)とのブロック番号は連続するから、YESに分岐する。
ステップS204:ブロックバイト数をブロックバイト数一時記憶領域に加算する。ブロックバイト数一時記憶領域の値は、6バイトになる。
ステップS205:新ファイルのOffset(34バイト)にブロックサイズ(3バイト)を加算する。新ファイルのOffsetは、37バイトになる。
一致ブロック発見時処理を終了する。
図7に示すループの最後に到達したので、ループの先頭に戻る。
(新ファイルのOffset=37バイト)
同様に、ブロックバイト数をブロックバイト数一時記憶領域に加算する。ブロックバイト数一時記憶領域の値は、9バイトになる。
(新ファイルのOffset=40バイト)
同様に、ブロックバイト数をブロックバイト数一時記憶領域に加算する。ブロックバイト数一時記憶領域の値は、12バイトになる。
(新ファイルのOffset=43バイト)
同様に、ブロックバイト数をブロックバイト数一時記憶領域に加算する。ブロックバイト数一時記憶領域の値は、15バイトになる。
(新ファイルのOffset=46バイト)
同様に、ブロックバイト数をブロックバイト数一時記憶領域に加算する。ブロックバイト数一時記憶領域の値は、18バイトになる。
(新ファイルのOffset=49バイト)
同様に、ブロックバイト数をブロックバイト数一時記憶領域に加算する。ブロックバイト数一時記憶領域の値は、21バイトになる。
(新ファイルのOffset=52バイト)
同様に、ブロックバイト数をブロックバイト数一時記憶領域に加算する。ブロックバイト数一時記憶領域の値は、24バイトになる。
新ファイルの終端に到達したので、図7に示すループを終了する。
ステップS301:新ファイルの終端は一致ブロックであるから、YESに分岐する。
ステップS302:ブロックバイト数一時記憶領域の値(24バイト)を差分ファイルに出力する。図6(c)に示すように、差分ファイルの「1,3,−2,YZ,4,6,−10,DXDEXEFXXF,25,3,−3,HXH,19,3,28」の後ろに「24」が書き込まれる。
上記の如く、実施例1によれば、一致ブロック発見時処理中において、一致ブロックの直前は不一致部分か、一致ブロックの直前は一致ブロックかなどに応じて、Offsetを差分ファイルに出力する、ブロックバイト数を一時記憶領域に出力する、不一致部分の内容を一時記憶領域に出力する、一時記憶領域の値や内容を差分ファイルに出力するなどの処理を適切に行うことによって、差分ファイルのサイズを「より小さく」、差分ファイル作成時間を「より短く」することが可能となる。
また、一致ブロックが発見された時に、直前の不一致部分の長さが閾値d未満又は閾値d以下である場合は、発見された一致ブロックを不一致部分とみなして、一致ブロック発見時処理へ移行しない。この閾値dを調節することによって、ファイルの変更の性質(例えば、一部広い範囲で非常に細かい修正がある場合などは、このパラメータを大きくすると効果が高い場合がある)に最適な差分抽出をすることができる。
実施例2では、不一致部分の長さに応じて、不一致部分の内容をそのまま差分ファイルに出力するか、それとも厳密差分を差分ファイルに出力するかを選択する。
図9に、実施例2における一致ブロック発見時処理の流れを示す。図6、7及び9に基づいて、実施例2を説明する。
(新ファイルのOffset=1〜5バイト)
実施例1と同じであるから説明を省略する。
(新ファイルのOffset=6バイト)
ステップS112:6〜8バイト(BBB)のチェックサムがチェックサムテーブル内に発見されるので、YESに分岐する。一致ブロック発見時処理を開始する。
ステップS201:直前は不一致部分であるから、YESに分岐する。
ステップS211:不一致部分に関する情報であることを示す識別子(−1)と共に、不一致部分(YZ)のバイト数(2バイト)を差分ファイルに出力する。図6(d)に示すように、差分ファイルの「1,3」の後ろに「−2」が書き込まれる。
ステップS213:直前の不一致部分の長さと、ブロックサイズの所定倍数の値とを比較する。所定倍数は3倍とする。つまり、ブロックサイズの所定倍数の値は、9バイトとなる。不一致部分(YZ)の長さ(2バイト)は9バイト以上ではないから、NOに分岐する。
なお、所定倍数は3倍に限定されない。2倍、4倍などでも良い。また所定倍数は整数倍数に限定されない。1.4倍、2.5倍、3.6倍などでも良い。また、所定倍「以上」ではなく、所定倍「より大」である場合に、厳密差分をとらないとしても良い。
さらに、直前の不一致部分の長さが、ブロックサイズに比べて、大きすぎる場合だけでなく、小さすぎる場合も厳密差分をとらないとしても良い。例えば、直前の不一致部分の長さがブロックサイズの1/2,1/3若しくは1/4未満又は1/2,1/3若しくは1/4以下である場合は厳密差分をとらないとしても良い。
また、直前の不一致部分の長さが、ブロックサイズに比べて、大きすぎないことだけを確認したら、厳密差分をとるとしても良く、また、小さすぎないことだけを確認したら厳密差分をとるとしても良く、さらに、大きすぎないこと及び小さすぎないことの両方を確認した上で厳密差分をとるとしても良い。
さらに、直前の不一致部分の長さとの比較対象は、「旧ファイルにおける対応部分の長さ」としても良い。「旧ファイルにおける対応部分」とは、「新ファイルにおける直前の一致ブロック」と「新ファイルにおける現在の一致ブロック」との間に「旧ファイルにおいて」存在するブロック、を意味する。
例えば、新ファイルのOffsetが22バイトである場合、「新ファイルにおける直前の一致ブロック」はCCCブロック、「新ファイルにおける現在の一致ブロック」はIIIブロック、これら両ブロックの間に旧ファイルにおいて存在するブロックは、DDDブロック、EEEブロック、FFFブロック、GGGブロック、HHHブロックである。よって、「旧ファイルにおける対応部分」は旧ファイルのDDDEEEFFFGGGHHH部分となる。そして、新ファイルにおける直前の不一致部分(DXDEXEFXXF部分)の長さ(10バイト)と、旧ファイルにおける対応部分(DDDEEEFFFGGGHHH部分)の長さ(15バイト)を比較して、「所定倍数以上」若しくは「所定倍数より大きい」又は「所定倍数以下」若しくは「所定倍数未満」であるかを判断する。
ステップS215:不一致部分一時記憶領域の内容(YZ)についての厳密差分を差分ファイルに出力する。図6(d)に示すように、差分ファイルの「1,3,−2」の後ろに「厳密差分データ」が書き込まれる。旧ファイルのどの部分を厳密差分の対象とするかは限定されない。例えば、直前の一致ブロックの後続のバイト列を厳密差分の対象とする。具体的には、新ファイルのOffsetが6バイトである場合、直前の一致ブロックはAAAブロックである。旧ファイルにおいてAAAブロックの後続のバイト列は、"BB"である。よって、新ファイルの"YZ"と旧ファイルの"BB"との間で厳密な差分をとる。
(新ファイルのOffset=9〜21バイト)
実施例1と同じであるから説明を省略する。
(新ファイルのOffset=22バイト)
ステップS112:22〜24バイト(III)のチェックサムがチェックサムテーブル内に発見されるので、YESに分岐する。一致ブロック発見時処理を開始する。
ステップS201:直前は不一致部分であるから、YESに分岐する。
ステップS211:不一致部分に関する情報であることを示す識別子(−1)と共に、不一致部分のバイト数(12〜21バイト目、つまり10バイト)を差分ファイルに出力する。図6(d)に示すように、差分ファイルの「1,3,−2,YZ,4,6」の後ろに「−10」が書き込まれる。
ステップS213:不一致部分の長さ(11バイト)は、ブロックサイズを所定倍した値(9バイト)以上であるから、YESに分岐する。
ステップS215:不一致部分一時記憶領域の内容(DXDEXEFXXF)を差分ファイルに出力する。図6(d)に示すように、差分ファイルの「1,3,−2,(厳密差分),4,6,−10」の後ろに「DXDEXEFXXF」が書き込まれる。
(新ファイルのOffset=25〜27バイト)
実施例1と同じであるから説明を省略する。
(新ファイルのOffset=28バイト)
ステップS112:28〜30バイト(GGG)のチェックサムがチェックサムテーブル内に発見されるので、YESに分岐する。
ステップS201:直前は不一致部分であるから、YESに分岐する。
ステップS211:不一致部分に関する情報であることを示す識別子(−1)と共に、不一致部分(HXH)のバイト数(3バイト)を差分ファイルに出力する。図6(d)に示すように、差分ファイルの「1,3,−2,YZ,4,6,−10,(厳密差分データ),25,3」の後ろに「−3」が書き込まれる。
ステップS213:不一致部分の長さ(3バイト)は、ブロックサイズを所定倍した値(9バイト)以上ではないから、NOに分岐する。
ステップS215:不一致部分一時記憶領域の内容(HXH)についての厳密差分を差分ファイルに出力する。図6(d)に示すように、差分ファイルの「1,3,−2,(厳密差分),4,6,−10,DXDEXEFXXF,25,3,−3」の後ろに「厳密差分データ」が書き込まれる。
(新ファイルのOffset=31〜52バイト)
実施例1と同じであるから説明を省略する。
上記の如く、実施例2によれば、閾値と不一致部分のデータ長との大小関係に応じて、厳密差分をとる/とらないを判断することとし、この閾値を新旧ファイルの特性に基づいて調整することによって、差分ファイルのサイズを「より小さく」、差分ファイル作成時間を「より短く」することが可能となる。
また、新ファイルにおける不一致部分のデータ長と「旧ファイルにおける対応部分の長さ」の大小関係に基づいて、厳密差分をとる/とらないを判断することによって、差分ファイル作成時間を「より短く」することが可能となる。
実施例3では、直前の一致ブロックと現在の一致ブロックとの関係に応じて、不一致部分の内容をそのまま差分ファイルに出力するか、それとも厳密差分を差分ファイルに出力するかを選択する。
実施例1に関して説明したように、現在の一致ブロックとは、新ファイルにおけるOffsetが先頭バイトとなっている一致ブロックを言う。直前の一致ブロックとは、現在の一致ブロックが発見される直前に発見された一致ブロックを言う。
「直前の一致ブロックと現在の一致ブロックとの関係」には、「直前の一致ブロックと
現在の一致ブロックとの旧ファイルにおける連続性」と「直前の一致ブロックと現在の一致ブロックとの旧ファイルにおける前後関係」が含まれる。
実施例1に関して説明したように、「直前の一致ブロックと現在の一致ブロックとの旧ファイルにおける連続性」とは、直前の一致ブロックと現在の一致ブロックとが旧ファイルにおいて連続するブロックか否かということを意味する。
「直前の一致ブロックと現在の一致ブロックとの旧ファイルにおける前後関係」とは、直前の一致ブロックと現在の一致ブロックとの新ファイルおける順序と、旧ファイルにおける順序とが、逆転しているかどうかを意味する。
具体的には、新ファイルにおけるOffsetが22バイトである場合、現在の一致ブロックとは22〜24バイトのブロック(III)のことであり、直前の一致ブロックとは9〜11バイトのブロック(CCC)のことであり、旧ファイルにおいても新ファイルにおいてもこれらブロックはCCCブロックが前で、IIIブロックが後ろであるから、順序は逆転していない。
一方、新ファイルにおけるOffsetが28バイトである場合、現在の一致ブロックとは28〜30バイトのブロック(GGG)のことであり、直前の一致ブロックとは22〜24バイトのブロック(III)のことである。そして、旧ファイルにおいては、GGGブロックが前で、IIIブロックが後ろであるが、新ファイルにおいてはIIIブロックが前で、GGGブロックが後ろであるから、順序が逆転している。
(新ファイルのOffset=1〜5バイト)
実施例1と同じであるから説明を省略する。
(新ファイルのOffset=6バイト)
ステップS112:ステップ6〜8バイト(BBB)のチェックサムがチェックサムテーブル内に発見されるので、YESに分岐する。一致ブロック発見時処理を開始する。
ステップS201:直前は不一致部分であるから、YESに分岐する。
ステップS211:不一致部分に関する情報であることを示す識別子(−1)と共に、不一致部分(YZ)のバイト数(2バイト)を差分ファイルに出力する。図6(e)に示すように、差分ファイルの「1,3」の後ろに「−2」が書き込まれる。
ステップS216:直前の一致ブロック(AAA)と現在の一致ブロック(BBB)とは旧ファイルにおいて連続するブロックであるから、YESに分岐する。
ステップS217:不一致部分一時記憶領域の内容(YZ)を差分ファイルに出力する。図6(e)に示すように、差分ファイルの「1,3,−2」の後ろに「YZ」が書き込まれる。厳密差分は取らない
(新ファイルのOffset=9〜21バイト)
実施例1と同じであるから説明を省略する。
(新ファイルのOffset=22バイト)
ステップS112:22〜24バイト(III)のチェックサムがチェックサムテーブル内に発見されるので、YESに分岐する。一致ブロック発見時処理を開始する。
ステップS201:直前は不一致部分であるから、YESに分岐する。
ステップS211:不一致部分に関する情報であることを示す識別子(−1)と共に、不一致部分(DXDEXEFXXF)のバイト数(10バイト)を差分ファイルに出力する。図6(e)に示すように、差分ファイルの「1,3,−2,YZ,4,6」の後ろに「−10」が書き込まれる。
ステップS216:直前の一致ブロック(CCC)と現在の一致ブロック(III)とは旧ファイルにおいて連続するブロックではないから、NOに分岐する。
ステップS218:直前の一致ブロック(CCC)と現在の一致ブロック(III)とは旧ファイルにおいて前後が逆ではないから、NOに分岐する。
ステップS219:不一致部分一時記憶領域の内容(DXDEXEFXXF)について厳密差分を差分ファイルに出力する。
(新ファイルのOffset=25〜27バイト)
実施例1と同じであるから説明を省略する。
(新ファイルのOffset=28バイト)
ステップS112:28〜30バイト(GGG)のチェックサムがチェックサムテーブル内に発見されるので、YESに分岐する。一致ブロック発見時処理を開始する。
ステップS201:直前は不一致部分であるから、YESに分岐する。
ステップS211:不一致部分に関する情報であることを示す識別子(−1)と共に、不一致部分(HXH)のバイト数(3バイト)を差分ファイルに出力する。図6(e)に示すように、差分ファイルの「1,3,−2,YZ,4,6,−10,(厳密差分データ),25,3」の後ろに「−3」が書き込まれる。
ステップS216:直前の一致ブロック(III)と現在の一致ブロック(GGG)とは旧ファイルにおいて連続するブロックするブロックであるから、NOに分岐する。
ステップS18:直前の一致ブロック(III)と現在の一致ブロック(GGG)とは旧ファイルにおいて前後が逆であるから、YESに分岐する。
ステップS217:不一致部分一時記憶領域の内容(HXH)を差分ファイルに出力する。図6(e)に示すように、差分ファイルの「1,3,−2,YZ,4,6,−10,(厳密差分データ),25,3,−3」の後ろに「HXH」が書き込まれる。
(新ファイルのOffset=31〜52バイト)
実施例1と同じであるから説明を省略する。
上記の如く、実施例3によれば、直前の一致ブロックと現在の一致ブロックとが旧ファイルにおいて連続するか、直前の一致ブロックと現在の一致ブロックとが旧ファイルにおいて前後が逆かに応じて、厳密差分をとる/とらないを判断することによって、差分ファイルのサイズを「より小さく」、差分ファイル作成時間を「より短く」することが可能となる。
(変形例1)
前記の如く、実施例3においては、直前の一致ブロックと現在の一致ブロックとが旧ファイルにおいて前後が逆である場合には、厳密差分を取らずに、不一致部分一時記憶領域の内容をそのまま差分ファイルに出力するとした。
しかし、直前の一致ブロックと現在の一致ブロックとが旧ファイルにおいて前後が逆である場合に、2つ前の一致ブロックと現在の一致ブロックとが旧ファイルにおいて前後が逆であるを検討するとしても良い。
そして、2つ前の一致ブロックと現在の一致ブロックとが旧ファイルにおいて前後が逆でない場合には、2つ前の一致ブロックの後ろから現在の一致ブロックの前までを不一致部分とみなすとしても良い。つまり、2つ前の不一致部分と直前の一致ブロックと直前の一致ブロックの全体を、新たな「直前の不一致部分」とみなす。
2つ前の一致ブロックを[CCC]、直前の一致ブロックを[GGG]、現在の一致ブロックを[EEE]、2つ前の不一致部分を[YYYYY]、直前の不一致部分を[ZZZZZZ]と表示して、具体的に説明する。
新ファイルにおいては、
[CCC][YYYYY][GGG][ZZZZZZ][EEE]
という順番で並んでいることになる。
旧ファイルにおいては、
[CCC]・・・[EEE]・・・[GGG]
という順序で並んでいるとする。
つまり、旧ファイルにおいては[EEE]の後ろに存在した[GGG]が、新ファイルにおいては[EEE]の前に存在している。
かかる場合において、差分ファイルには、
[EEE]の前に[ZZZZZZ]という不一致部分が存在し、
その前に[GGG]という一致ブロックが存在し、
その前に[YYYYY]という不一致部分が存在し、
その前に[CCC]という一致ブロックが存在する、
という情報を記録するのではなく、
[EEE]の前に[YYYYYGGGZZZZZZ]という不一致部分が存在し、
その前に[CCC]という一致ブロックが存在する、
という情報を記憶する。
このようにすることで、新旧ファイルの特性によっては、差分ファイルのサイズを小さくすることが可能となる。
(変形例2)
変形例1では、2つ前の不一致部分と、直前の一致ブロックとを、直前の不一致部分と一体として、「新たな」直前の不一致部分とした。
しかし、「2つ前の」不一致部分や、「直前の」一致ブロックに限定する必要はない。現在の一致ブロックから所定距離d内に「3つ前の」不一致部分や、「2つ前の」一致ブロックなどを含めて、新たな直前の不一致部分としても良い。
3つ前の一致ブロックを[AAA]、3つ前の不一致部分を[XXXX]と表示して、具体的に説明する。
新ファイルにおいては、
[AAA][XXXX][EEE][YYYYY][GGG][ZZZZZZ][CCC]
という順番で並んでいることになる。
旧ファイルにおいては、
[AAA]・・・[CCC]・・・[EEE]・・・[GGG]
という順序で並んでいるとする。
つまり、[GGG]は、旧ファイルにおいては[EEE]の後ろに存在したのに、新ファイルにおいては[EEE]の前に存在している。
つまり、旧ファイルにおいては[CCC]の後ろに存在した[EEE]及び[GGG]が、新ファイルにおいては[CCC]の前に存在している。
かかる場合において、差分ファイルには、
[CCC]の前に[ZZZZZZ]という不一致部分が存在し、
その前に[GGG]という一致ブロックが存在し、
その前に[YYYYY]という不一致部分が存在し、
その前に[EEE]という一致ブロックが存在し、
その前に[XXXX]という不一致部分が存在し、
その前に[AAA]という一致ブロックが存在する、
という情報を記録するのではなく、
[CCC]の前に[XXXXEEEYYYYYGGGZZZZZZ]という不一致部分が存在し、
その前に[AAA]という一致ブロックが存在する、
という情報を記憶する。
距離dの値を適宜変更することで、新旧ファイルの特性によっては、差分ファイルのサイズをより小さくすることが可能となる。
上記の如く、各実施例によれば、差分ファイは、ブロック単位のラフな差分抽出の「差分ファイル作成速度が高速」という長所と、厳密差分の「差分ファイルのサイズが小さい」という長所を兼ね備えることが可能である。
実施例1〜3の差分ファイル作成装置の構成を示すブロック図である。 自己チューニング機能付き差分抽出処理の全体の流れを示すフローチャートである。 対象ファイル情報の取得と実行パラメータ自動設定の流れを示すフローチャートである。 デフォルト値テーブルの一例である。 差分抽出主処理の流れを示すフローチャートである。 (a)は旧ファイルの一例を、(b)は新ファイルの一例を、(c)〜(e)は実施例1〜3において作成される差分ファイルを示す。 ハイブリッド差分抽出処理の流れを示すフローチャートである。 実施例1における一致ブロック発見時処理の流れを示すフローチャートである。 実施例2における一致ブロック発見時処理の流れを示すフローチャートである。 実施例3における一致ブロック発見時処理の流れを示すフローチャートである。
符号の説明
3…差分ファイル作成装置 10…送信部、 20…演算処理装置(CPU)、
30…記憶部、 40…通信網、 50…リモートサイト

Claims (16)

  1. コンピュータに
    第1のファイルをそれぞれがmバイトである第1,第2,第3,・・・第nの複数のブロックに分割する手順と、
    第2のファイルのrバイト目から(r+m−1)バイト目までを前記複数のブロックのそれぞれと比較する手順と、
    前記第2のファイルの前記rバイト目から前記(r+m−1)バイト目までが前記複数のブロックのいずれかと一致する場合は、
    一致するブロックの前記第1のファイルにおける位置を特定可能な情報を差分ファイルに記録するブロック位置記録手順と、
    前記第2のファイルの(r+m)バイト目から(r+2*m−1)バイト目までを前記複数のブロックとの新たな比較対象とする手順と、を実行させ、
    前記第2のファイルの前記rバイト目から前記(r+m−1)バイト目までが前記ブロックのいずれとも一致しない場合は、
    前記rバイト目のデータを前記差分ファイルに記録する手順と、
    前記第2のファイルの(r+1)バイト目から前記(r+m)バイト目までを前記複数のブロックとの新たな比較対象とする手順と、を実行させ
    前記第2のファイルの前記rバイト目から(r+m−1)バイト目までが、前記ブロックのいずれとも一致しない場合に、前記rバイト目のデータを第3の一時記憶領域に記憶し、
    前記第2のファイルの前記(r+1)バイト目から前記(r+m)バイト目までが、前記ブロックのいずれとも一致しない場合に、前記(r+1)バイト目のデータを第3の一時記憶領域に追加記憶する手順を繰り返し、
    前記第2のファイルの(r+t)バイト目から(r+t+m−1)バイト目までが、前記ブロックのいずれかと一致する場合に、前記第3の一時記憶領域に記憶されている前記rバイト目から(r+t−1)バイト目までのデータを差分ファイルに記録し、
    前記tがブロックサイズの所定倍数値以上である場合は、前記第3の一時記憶領域に記憶されている前記rバイト目から前記(r+t−1)バイト目までのデータを
    前記tがブロックサイズの所定倍数値以上でない場合は、前記第3の一時記憶領域に記憶されている前記rバイト目から前記(r+t−1)バイト目までのデータと前記第1のファイルとの厳密差分を、差分ファイルに記録する
    差分ファイル作成プログラム(m,n及びtは自然数)。
  2. 前記分割する手順は、前記複数のブロックについてチェックサムテーブルを作成する手順を、
    前記比較する手順は、前記rバイト目から(r+m−1)バイト目までのチェックサム値を前記チェックサムテーブル内の各チェックサム値と比較する手順を、
    さらに含む請求項1記載の差分ファイル作成プログラム。
  3. 前記ブロック位置記録手順は、
    前記第2のファイルの前記rバイト目から(r+m−1)バイト目までが、前記第1のファイルのpバイト目から(p+m−1)バイト目までのブロックと一致する場合に、
    一致ブロックの開始位置を示す前記pバイト目のpの値と、ブロックサイズを示す前記mバイトのmの値とを、差分ファイルに記録する手順を、
    さらに含む請求項1又は2記載の差分ファイル作成プログラム(pはmの倍数+1)。
  4. 直前の一致ブロックと現在の一致ブロックとが、第1のファイルにおいて、連続するブロックである場合は、前記第3の一時記憶領域に記憶されている前記rバイト目から前記(r+t−1)バイト目までのデータを、差分ファイルに記録し、
    直前の一致ブロックと現在の一致ブロックとが、第1のファイルにおいて、連続するブロックでない場合は、前記第3の一時記憶領域に記憶されている前記rバイト目から前記(r+t−1)バイト目までのデータと前記第1のファイルとの厳密差分を、差分ファイルに記録する
    請求項1乃至3のいずれか一項に記載の差分ファイル作成プログラム。
  5. 直前の一致ブロックと現在の一致ブロックとの、第1のファイルにおける出現順序と第2のファイルにおける出現順序とが、
    逆転している場合は、前記第3の一時記憶領域に記憶されている前記rバイト目から前記(r+t−1)バイト目までのデータを
    逆転していない場合は、前記第3の一時記憶領域に記憶されている前記rバイト目から前記(r+t−1)バイト目までのデータと前記第1のファイルとの厳密差分を、差分ファイルに記録する
    請求項1乃至4のいずれか一項に記載の差分ファイル作成プログラム。
  6. 直前の一致ブロックが、第1のファイルにおいては現在の一致ブロックの後方に存在するが、2つ前の一致ブロックは、第1のファイルにおいても現在の一致ブロックの前方に存在する場合に、前記2つ前の一致ブロックの直後から前記現在の一致ブロックの直前までを不一致部分とみなす請求項1乃至5のいずれか一項に記載の差分ファイル作成プログラム。
  7. 第2のファイル内において現在の一致ブロックから前方向の所定距離内に複数の一致ブロックが存在し、前記複数の一致ブロック内に、第1のファイル内においても前記現在の一致ブロックの前方に存在する両ファイル内前方一致ブロックが存在する場合に、
    前記両ファイル内前方一致ブロックの直後から前記現在の一致ブロックの直前までを不一致部分とみなす請求項1乃至6のいずれか一項に記載の差分ファイル作成プログラム。
  8. 第2のファイル内において一致ブロックが発見された場合であって、直前の不一致部分の長さが閾値未満又は閾値以下である場合は、一致ブロックとして処理せず、不一致部分として処理する請求項1乃至7のいずれか一項に記載の差分ファイル作成プログラム。
  9. 記憶手段に、第1のファイルを読み込み、それぞれがmバイトである第1,第2,第3,・・・第nの複数のブロックに分割するステップと、
    比較手段が、第2のファイルのrバイト目から(r+m−1)バイト目までを前記複数のブロックのそれぞれと比較するステップと、
    前記比較手段が、前記第2のファイルの前記rバイト目から(r+m−1)バイト目までが前記複数のブロックのいずれかと一致すると判断した場合は、
    一致するブロックの前記第1のファイルにおける位置を特定可能な情報を差分ファイルに記録するブロック位置記録ステップと、
    前記第2のファイルの(r+m)バイト目から(r+2*m−1)バイト目までを前記複数のブロックとの新たな比較対象とするステップと、を行い、
    前記比較手段が、前記第2のファイルの前記rバイト目から(r+m−1)バイト目までが前記ブロックのいずれとも一致しないと判断した場合は、
    前記rバイト目のデータを前記差分ファイルに記録するステップと、
    前記第2のファイルの(r+1)バイト目から(r+m)バイト目までを前記複数のブロックとの新たな比較対象とするステップと、を行い、
    前記比較手段が、前記第2のファイルの前記rバイト目から(r+m−1)バイト目までが、前記ブロックのいずれとも一致しないと判断した場合に、前記rバイト目のデータを第3の一時記憶領域に記憶し、
    前記比較手段が、前記第2のファイルの前記(r+1)バイト目から前記(r+m)バイト目までが、前記ブロックのいずれとも一致しないと判断した場合に、前記(r+1)バイト目のデータを第3の一時記憶領域に追加記憶するステップを繰り返し、
    前記比較手段が、前記第2のファイルの(r+t)バイト目から(r+t+m−1)バイト目までが、前記ブロックのいずれかと一致すると判断した場合に、前記第3の一時記憶領域に記憶されている前記rバイト目から(r+t−1)バイト目までのデータを差分ファイルに記録し、
    前記比較手段が、前記tがブロックサイズの所定倍数値以上であると判断した場合は、前記第3の一時記憶領域に記憶されている前記rバイト目から前記(r+t−1)バイト目までのデータを
    前記比較手段が、前記tがブロックサイズの所定倍数値以上でないと判断した場合は、前記第3の一時記憶領域に記憶されている前記rバイト目から前記(r+t−1)バイト目までのデータと前記第1のファイルとの厳密差分を、差分ファイルに記録する
    差分ファイル作成方法(m,n及びtは自然数)。
  10. 前記分割するステップは、演算手段が、前記複数のブロックについてチェックサムテーブルを作成するステップを、
    前記比較するステップは、前記比較手段が、前記rバイト目から(r+m−1)バイト目までのチェックサム値を前記チェックサムテーブル内の各チェックサム値と比較するステップを、
    さらに含む請求項9記載の差分ファイル作成方法。
  11. 前記ブロック位置記録ステップは、
    前記比較手段が、前記第2のファイルの前記rバイト目から(r+m−1)バイト目までが、前記第1のファイルのpバイト目から(p+m−1)バイト目までのブロックと一致すると判断した場合に、
    一致ブロックの開始位置を示す前記pバイト目のpの値と、ブロックサイズを示す前記mバイトのmの値と、を差分ファイルに記録するステップを、
    さらに含む請求項9又は10に記載の差分ファイル作成方法(pはmの倍数+1)。
  12. 直前の一致ブロックと現在の一致ブロックとが、第1のファイルにおいて、連続するブロックである場合は、前記第3の一時記憶領域に記憶されている前記rバイト目から前記(r+t−1)バイト目までのデータを、差分ファイルに記録し、
    直前の一致ブロックと現在の一致ブロックとが、第1のファイルにおいて、連続するブロックでない場合は、前記第3の一時記憶領域に記憶されている前記rバイト目から前記(r+t−1)バイト目までのデータと前記第1のファイルとの厳密差分を、差分ファイルに記録する
    請求項9乃至11のいずれか一項に記載の差分ファイル作成方法。
  13. 直前の一致ブロックと現在の一致ブロックとの、第1のファイルにおける出現順序と第2のファイルにおける出現順序とが、
    逆転している場合は、前記第3の一時記憶領域に記憶されている前記rバイト目から前記(r+t−1)バイト目までのデータを
    逆転していない場合は、前記第3の一時記憶領域に記憶されている前記rバイト目から前記(r+t−1)バイト目までのデータと前記第1のファイルとの厳密差分を、差分ファイルに記録する
    請求項9乃至12のいずれか一項に記載の差分ファイル作成方法。
  14. 直前の一致ブロックが、第1のファイルにおいては現在の一致ブロックの後方に存在するが、2つ前の一致ブロックは、第1のファイルにおいても現在の一致ブロックの前方に存在する場合に、前記2つ前の一致ブロックの直後から前記現在の一致ブロックの直前までを不一致部分とみなす請求項9乃至13のいずれか一項に記載の差分ファイル作成方法。
  15. 第2のファイル内において現在の一致ブロックから前方向の所定距離内に複数の一致ブロックが存在し、前記複数の一致ブロック内に、第1のファイル内においても前記現在の一致ブロックの前方に存在する両ファイル内前方一致ブロックが存在する場合に、
    前記新旧前方一致ブロックの直後から前記現在の一致ブロックの直前までを不一致部分とみなす請求項9乃至14のいずれか一項に記載の差分ファイル作成方法。
  16. 第2のファイル内において一致ブロックが発見された場合であって、直前の不一致部分の長さが閾値未満又は閾値以下である場合は、一致ブロックとして処理せず、不一致部分として処理する請求項9乃至15のいずれか一項に記載の差分ファイル作成方法。
JP2003409369A 2003-12-08 2003-12-08 差分ファイル作成プログラム及び方法 Expired - Fee Related JP4467965B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2003409369A JP4467965B2 (ja) 2003-12-08 2003-12-08 差分ファイル作成プログラム及び方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003409369A JP4467965B2 (ja) 2003-12-08 2003-12-08 差分ファイル作成プログラム及び方法

Publications (2)

Publication Number Publication Date
JP2005173726A JP2005173726A (ja) 2005-06-30
JP4467965B2 true JP4467965B2 (ja) 2010-05-26

Family

ID=34730774

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003409369A Expired - Fee Related JP4467965B2 (ja) 2003-12-08 2003-12-08 差分ファイル作成プログラム及び方法

Country Status (1)

Country Link
JP (1) JP4467965B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101356519B (zh) * 2006-06-19 2011-11-09 三星电子株式会社 用于可利用空中机制的便携式设备的程序升级系统及方法
JP4614358B2 (ja) * 2006-09-04 2011-01-19 株式会社日立情報システムズ プログラムソース比較システムおよび比較方法、ならびにそのプログラム
EP1944702B1 (en) * 2007-01-10 2018-07-25 Harman Becker Automotive Systems GmbH Updatable navigation database
JP4715774B2 (ja) * 2007-03-02 2011-07-06 日本電気株式会社 レプリケーション方法、レプリケーションシステム、ストレージ装置、プログラム
JP2014199615A (ja) * 2013-03-29 2014-10-23 株式会社Ubic ファイル検索システム、ファイル検索方法およびファイル検索プログラム

Also Published As

Publication number Publication date
JP2005173726A (ja) 2005-06-30

Similar Documents

Publication Publication Date Title
US9286165B2 (en) Apparatus and method for recovering partition using backup boot record information
US9015214B2 (en) Process of generating a list of files added, changed, or deleted of a file server
US7526497B2 (en) Database retrieval apparatus, retrieval method, storage medium, and program
US20130151562A1 (en) Method of calculating feature-amount of digital sequence, and apparatus for calculating feature-amount of digital sequence
US9195738B2 (en) Tokenization platform
US7756859B2 (en) Multi-segment string search
US20070065045A1 (en) Information management apparatus, information management method, and computer program product
EP1587006A2 (en) Method and system for renaming consecutive keys in a B-tree
CN108228799B (zh) 对象索引信息的存储方法及装置
WO2015139381A1 (zh) 一种终端软件升级方法及装置
CN106445476B (zh) 一种代码变更信息确定方法、装置及电子设备
JP4233564B2 (ja) データ処理装置、データ処理用のプログラムおよび記録媒体
JP4237813B2 (ja) 構造化文書管理システム
JP4467965B2 (ja) 差分ファイル作成プログラム及び方法
JP4960417B2 (ja) 可変長のデータ断片の開始・終了オフセットを決定する方法及び装置
CN110516124B (zh) 一种文件解析方法、装置和计算机可读存储介质
CN107590233B (zh) 一种文件管理方法及装置
CN110058952B (zh) 一种嵌入式设备文件的校验方法及系统
CN116150093B (zh) 一种对象存储列举对象的实现方法及电子设备
CN110704573B (zh) 目录存储方法、装置、计算机设备及存储介质
CN107943849B (zh) 视频文件的检索方法及装置
JP5149063B2 (ja) データ比較装置およびプログラム
JP3534471B2 (ja) マージソート方法及びマージソート装置
JP4091586B2 (ja) 構造化文書管理システム、索引構築方法及びプログラム
CN110543622A (zh) 文本相似度检测方法、装置、电子设备及可读存储介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20061106

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090714

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090910

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091027

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091214

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20100209

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100224

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130305

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130305

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140305

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees