(57)【要約】ネットワークを介して配信されるファイルのファイルサイズを縮小するためのシステムおよび方法を開示する。方法は、データシーケンスを含む第１のファイルを受信することと、重複するデータシーケンスに対応するエントリを有するハッシュテーブルを作成することと、データシーケンスを含む第２のファイルを受信することと、該第１のファイルおよび該第２のファイルの両方に存在するデータシーケンスを判断するために、該第２のファイル内の各データシーケンスと該ハッシュテーブル内のデータシーケンスとを比較することと、該第２のファイルからのデータシーケンスと、該第１のファイルおよび該第２のファイルの両方に存在する該データシーケンスの位置および長さの表示とを含む第３のファイルを作成することとを包含する。
2009543227.tif 000002
【特許請求の範囲】
【請求項１】
以前に格納されたファイルに対する効率的な更新を作成するための方法であって、該方法は、
（ａ）第１の複数のデータシーケンスを含む第１のファイルを受信するステップと、
（ｂ）第２の複数のデータシーケンスを含む第２のファイルを受信するステップと、
（ｃ）複数のエントリを有するハッシュテーブルを作成するステップであって、該複数のエントリのそれぞれは、該第１の複数のシーケンスのそれぞれの１つに対応し、該エントリの少なくとも２つは、重複するデータシーケンスに対応する、ステップと、
（ｄ）該第２の複数のデータシーケンスに対してハッシュ値を計算するステップと、
（ｅ）両方のファイルに存在するデータシーケンスを判断するために、該第２の複数のデータシーケンスのそれぞれを同じハッシュ値を有する該第１の複数のシーケンスからのシーケンスと比較するステップと、
（ｆ）該第１のファイルおよび該第２のファイルの両方に存在する該データシーケンスの長さおよび位置の表示を格納するステップと、
（ｇ）該第２のファイルからのデータシーケンスと、該第１のファイルおよび該第２のファイルの両方に存在する該データシーケンスの位置および長さの表示とを含む第３のファイルを作成するステップと
を包含する、方法。
【請求項２】
前記ステップ（ｃ）は、前記第１のファイル内の連続かつ重複するバイトシーケンスに対応するエントリを有するハッシュテーブルを作成するステップを包含する、請求項１に記載の方法。
【請求項３】
前記ステップ（ｃ）は、前記第１のファイル内の４バイト長の連続かつ重複するシーケンスに対応するエントリを有するハッシュテーブルを作成するステップを包含する、請求項１に記載の方法。
【請求項４】
前記ステップ（ｃ）は、前記第１のファイルの所与のＮバイトを網羅するウィンドウ内のデータシーケンスに対応するエントリを有するハッシュテーブルを作成するステップを包含する、請求項１に記載の方法。
【請求項５】
前記ステップ（ｄ）は、
（ｉ）前記第２のファイル内の所与のデータシーケンスに対してハッシュ値を計算するステップと、
（ｉｉ）該ハッシュ値に対応するエントリに対して前記ハッシュテーブルを確認するステップと、
（ｉｉｉ）該第２のファイルからの該データシーケンスを該ハッシュテーブルエントリに対応する前記第１のファイルのデータシーケンスと比較するステップと、
（ｉｖ）該第１のファイルおよび該第２のファイルの両方に存在するシーケンスの全体の長さを判断するために、該第２のファイルからの該シーケンスの後のバイトを該第１のファイル内の該シーケンスの後のバイトと比較するステップと
を包含する、請求項１に記載の方法。
【請求項６】
前記ステップ（ｇ）は、前記第２のファイルからのデータシーケンスと、前記第１のファイルおよび該第２のファイルの両方に存在するシーケンスの位置および長さの表示とを含む第３のファイルを作成するステップを包含し、該位置は、該第１のページの位置からの相対的な距離として表示される、請求項１に記載の方法。
【請求項７】
前記ステップ（ｇ）は、前記第２のファイルからのデータシーケンスと、前記第１のファイルおよび該第２のファイルの両方に存在するシーケンスの位置および長さの表示とを含む第３のファイルを作成するステップを包含し、該第３のファイルは、バイト符号化プロトコルを使用してバイトシーケンスに変換される、請求項１に記載の方法。
【請求項８】
（ｈ）前記第３のファイルをクライアントに伝送するステップ
をさらに包含する、請求項１に記載の方法。
【請求項９】
前記ステップ（ｈ）は、ＨＴＴＰを介して前記第３のファイルをクライアントに伝送するステップを包含する、請求項８に記載の方法。
【請求項１０】
前記ステップ（ｈ）は、Ｊａｖａ（登録商標）ｓｃｒｉｐｔ変数を介して前記第３のファイルをクライアントに伝送するステップを包含する、請求項８に記載の方法。
【請求項１１】
前記ステップ（ｈ）は、前記第２のファイルへと再アセンブリするために、前記第３のファイルをクライアントに伝送するステップを包含する、請求項８に記載の方法。
【請求項１２】
以前に格納されたファイルへの更新を効率良く受信するための方法であって、該方法は、
（ａ）データシーケンスを含む第１のファイルを受信するステップと、
（ｂ）データシーケンスと、該第１のファイル内のシーケンスの位置および長さの表示とを含む第２のファイルを受信するステップと、
（ｃ）該第２のファイルからのデータシーケンスと、該第２のファイルによって示される該第１のファイル内のシーケンスとを含む第３のファイルを作成するために、Ｊａｖａ（登録商標）ｓｃｒｉｐｔ機能を実行するステップと
を包含する、方法。
【請求項１３】
前記第２のファイルは、データシーケンスと、前記第１のファイル内のシーケンスの位置および長さの表示とを含むＪａｖａ（登録商標）ｓｃｒｉｐｔ変数を含む、請求項１２に記載の方法。
【請求項１４】
前記ステップ（ｂ）は、データシーケンスと、前記第１のファイル内のシーケンスの位置および長さの表示とを含む第２のファイルを受信するステップを包含し、該位置は、該第１のファイル内の位置からの相対的な差分として表示される、請求項１２に記載の方法。
【請求項１５】
前記ステップ（ｃ）は、
（ｉ）当初は前記第１のファイルの始まりを示す参照ポインタを維持するステップと、
（ｉｉ）参照ポインタからの該第１のファイル内のシーケンスの距離を示す受信した情報に基づいて該第１のファイルからのシーケンスを識別するステップと、
（ｉｉｉ）該第１のファイル内のシーケンスの最後のバイトに１つ加えたバイトを示すように該参照ポインタを設定するステップと
を包含する、請求項１４に記載の方法。
【請求項１６】
以前に格納されたファイルへの効率的な更新を作成するためのコンピュータシステムであって、該システムは、
第１のファイルおよび第２のファイルを受信するトランシーバであって、各ファイルは、複数のデータシーケンスのそれぞれを含む、トランシーバと、
該トランシーバと通信し、該第１のファイルおよび該第２のファイル内のデータシーケンスに対してハッシュ値を計算するハッシュエンジンであって、該シーケンスの少なくとも２つが重複し、該第１のファイルおよび該第２のファイルの両方に存在するデータシーケンスを判断する、ハッシュエンジンと、
該ハッシュエンジンと通信し、該第１のファイルおよび該第２のファイルの両方に存在する該シーケンスの長さおよび位置の表示を格納するストレージエレメントと、
該ストレージエレメントと通信し、該第２のファイルからのデータシーケンスと、両方のファイルに存在する該シーケンスの長さおよび位置の表示とを含む第３のファイルを作成するプロセッサと
を備える、コンピュータシステム。
【請求項１７】
前記ハッシュエンジンは、前記第１のファイル内の連続かつ重複するバイトシーケンスに対してハッシュ値を計算する、請求項１６に記載のコンピュータシステム。
【請求項１８】
前記ハッシュエンジンは、前記第１のファイル内の４バイト長の連続かつ重複するシーケンスに対してハッシュ値を計算する、請求項１６に記載のコンピュータシステム。
【請求項１９】
前記ハッシュエンジンは、前記第１のファイルの所与のＮバイトを網羅するウィンドウ内のデータシーケンスに対してハッシュ値を計算する、請求項１６に記載のコンピュータシステム。
【請求項２０】
前記ハッシュエンジンは、前記第１のファイルおよび前記第２のファイルの両方に存在するデータシーケンスの全体の長さを判断するために、該第１のファイルおよび該第２のファイルの両方に存在するシーケンスの後のバイトを比較する、請求項１６に記載のコンピュータシステム。
【請求項２１】
前記プロセッサは、前記第２のファイルからのデータシーケンスと、前記第１のファイル内のデータシーケンスの位置および長さの表示とを含む第３のファイルを作成し、該位置は、参照ポインタから該第１のファイルへの相対的な距離として表示される、請求項１６に記載のコンピュータシステム。
【請求項２２】
前記プロセッサは、前記生成された第３のファイルをバイトストリームに変換する、請求項１６に記載のコンピュータシステム。
【請求項２３】
前記コンピュータシステムは、前記第３のファイルをクライアントに伝送するためのトランスミッタをさらに備える、請求項１６に記載のコンピュータシステム。
【請求項２４】
前記トランスミッタは、ＨＴＴＰを介して前記第３のファイルをクライアントに伝送する、請求項２３に記載のコンピュータシステム。
【請求項２５】
前記トランスミッタは、Ｊａｖａ（登録商標）ｓｃｒｉｐｔ変数を介して前記第３のファイルをクライアントに伝送する、請求項２４に記載のコンピュータシステム。
【請求項２６】
前記トランスミッタは、前記第２のファイルへと再アセンブリするために、前記第３のファイルをクライアントに伝送する、請求項２４に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、インターネットおよびコンピュータネットワークのコンテンツ配信に関し、特に、ネットワークを介して配信されるファイルのファイルサイズを縮小させるためのシステムおよび方法に関する。
【背景技術】
【０００２】
多くのネットワーク環境において、帯域幅は、不十分なリソースである。帯域幅は、環境の接続インフラストラクチャ、またはネットワークにおけるデバイスの最大伝送または受信の速度によって制限されることがある。帯域幅が不足する場合、ネットワークを介して伝送されるファイルサイズを縮小することによって、伝送時間の大幅な改善を実現することができる。
【０００３】
インターネットおよびワールドワイドウェブを含むネットワークの別の一般的な特徴として、冗長なデータの伝送がある。例えば、多くの場合、クライアントは、実行された任意の変更をチェックするために、異なる日に同じファイルをリクエストすることがある。このファイルデータの大部分は、ユーザに既に伝送されているために、冗長となる可能性がある。例えば、ファイルが新聞のウェブページである場合、見出しおよびフォーマット情報は、変わらないままである。別の例として、クライアントは、例えば、ファイルが更新されるスポーツのスコアをリストするウェブページである場合、１時間のうちに数回ファイルをロードすることがある。この例では、毎回の閲覧において変化する唯一のデータは、スコアのみとなることがあり、チーム名、ロゴ、およびフォーマットは変わらないままである。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
伝送されるファイルサイズを縮小させるためにこの冗長性を活用する、いくつかのシステムおよび方法が既に存在する。多くのウェブブラウザは、ユーザが同じサイトを再び閲覧する場合にイメージを再伝送する必要のないように、ユーザが既に訪問したサイトのイメージを格納している。この方法は効果的ではあるが、典型的には、標準的なイメージファイルのみに制限されており、大容量のテキスト、スクリプト、またはフォーマット情報を含むページのファイルサイズを縮小させることはできない。多くのウェブサイトは、変更されたページの一部分のみが再伝送されるようにウェブページを制御するために、フレーム、アプレット、またはスクリプトを利用する。この方法の欠点は、こうした技術を使用するためのサイトのプログラミングに、多くの場合、かなりの開発期間およびリソースが必要となり、以前から存在したファイルを再コーディングしなければならない可能性がある、ということである。このため、現在存在するファイルおよび将来的なファイルの両方に容易に適用可能な、伝送ファイルサイズを縮小させるために多くのネットワーク伝送でみられる冗長性に対して影響力を与える手段が必要とされている。
【課題を解決するための手段】
【０００５】
（本発明の概要）
本発明は、以前に伝送されたデータを含むファイルのために伝送ファイルサイズを大幅に縮小できる、効率的な機構を提供する。本発明は、ファイル特有、アプリケーション特有、またはネットワーク特有のソリューションを必要とせずに、この縮小を可能にし得、このために、多大な開発投資が不要となる。
【０００６】
一局面において、本発明は、以前に格納されたファイルへの効率的な更新を作成するための方法である。該方法は、データシーケンスを含む第１のファイルを受信することと、重複するデータシーケンスに対応するエントリを有するハッシュテーブルを作成することと、データシーケンスを含む第２のファイルを受信することと、該第１のファイルおよび該第２のファイルの両方に存在するデータシーケンスを判断するために、該第２のファイル内の各データシーケンスと該ハッシュテーブル内のデータシーケンスとを比較することと、該第１のファイルおよび該第２のファイルの両方に存在する該データシーケンスの長さおよび位置の表示を格納することと、該第２のファイルからのデータシーケンスと、該第１のファイルおよび該第２のファイルの両方に存在する該データシーケンスの位置および長さの表示とを含む第３のファイルを作成することとを包含する。
【０００７】
別の局面において、本発明は、以前に格納されたファイルへの効率的な更新を受信する方法である。該方法は、データシーケンスを含む第１のファイルを受信することと、データシーケンスと、該第１のファイル内のシーケンスの位置および長さの表示とを含む第２のファイルを受信することと、該第２のファイルからのデータシーケンスと、該第２のファイルによって示される該第１のファイル内のシーケンスを含む第３のファイルを作成するために、Ｊａｖａ（登録商標）ｓｃｒｉｐｔ機能を実行することとを包含する。
【０００８】
さらに別の局面において、本発明は、以前に格納されたファイルへの効率的な更新を作成するためのコンピュータシステムである。該システムは、第１のファイルおよび第２のファイルを受信するトランシーバであって、各ファイルは、複数のデータシーケンスのそれぞれを含む、トランシーバと、該トランシーバと通信し、該第１のファイルおよび該第２のファイル内のデータシーケンスに対してハッシュ値を計算するハッシュエンジンであって、該シーケンスの少なくとも２つが重複し、該第１のファイルおよび該第２のファイルの両方に存在するデータシーケンスを判断する、ハッシュエンジンと、該ハッシュエンジンと通信し、該第１のファイルおよび該第２のファイルの両方に存在する該シーケンスの長さおよび位置の表示を格納するストレージエレメントと、該ストレージエレメントと通信し、該第２のファイルからのデータシーケンスと、両方のファイルに存在する該シーケンスの長さおよび位置の表示とを含む第３のファイルを作成するプロセッサとを備える。
【図面の簡単な説明】
【０００９】
【図１Ａ】図１Ａは、クライアントサーバネットワークのデバイスとして有益なコンピューティングデバイスまたはネットワークデバイスの実施形態のブロック図である。
【図１Ｂ】図１Ｂは、クライアントサーバネットワークのデバイスとして有益なコンピューティングデバイスまたはネットワークデバイスの実施形態のブロック図である。
【図２】図２は、クライアントサーバネットワークにおいて動作するネットワークアプライアンスの実施形態を示すブロック図である。
【図３】図３は、以前に格納されたファイルへの効率的な更新を作成するための方法の一実施形態を表す流れ図である。
【図４】図４は、以前に格納されたファイルへの効率的な更新を作成するための方法の別の実施形態を表す流れ図である。
【図５】図５は、以前に格納されたファイルへの効率的な更新を作成および受信するための方法の別の実施形態を表す流れ図である。
【図６】図６は、以前に格納された第１のファイルからの第２のファイルと、第２のファイルからのデータシーケンスならびに第１のファイルおよび第２のファイルの両方に存在するデータシーケンスの位置および長さの表示を含む第３のファイルとをアセンブルするための方法の一実施形態を表す流れ図である。
【図７】図７は、ファイル伝送方法を判断するための方法の一実施形態を表す流れ図である。
【発明を実施するための形態】
【００１０】
本発明の上述のおよびその他の目的、局面、特徴、および利点は、添付の図面と共に以下の説明を参照することによって、より明らかに、またより適切に理解されるであろう。
【００１１】
（本発明の詳細な説明）
本明細書に記載されているように、サーバおよびクライアントは、パーソナルコンピュータ、ノートブックコンピュータ、パーソナルデジタルアシスタント、セル式電話、ポケットベル、スタンドアロンコンピュータサーバ、ブレード（ｂｌａｄｅ）サーバ、ラックマウント式サーバ、または上記サーバの任意の種類のグループを限定としてではなく含む、情報の処理および情報の送受信が可能な任意のデバイスを備え得る。
【００１２】
図１Ａおよび図１Ｂは、クライアントコンピュータデバイスおよびサーバコンピュータデバイスとして有益な典型的なコンピュータ１００のブロック図を表す。図１Ａおよび図１Ｂに示されているように、各コンピュータ１００は、中央処理装置１０２、およびメインメモリ装置１０４を含む。各コンピュータ１００はまた、１つ以上の入力／出力デバイス１３０ａ〜１３０ｂ（概して、参照番号１３０と称される）等のその他の付加的なエレメント、および中央処理装置１０２と通信するキャッシュメモリ１４０を含み得る。
【００１３】
中央処理装置１０２は、メインメモリ装置１０４からフェッチされる命令に応答し、これを処理する任意の論理回路網である。多くの実施形態において、中央処理装置は、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｍｏｕｎｔａｉｎ  Ｖｉｅｗ、Ｃａｌｉｆｏｒｎｉａ）製、Ｍｏｔｏｒｏｌａ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｓｃｈａｕｍｂｕｒｇ、Ｉｌｌｉｎｏｉｓ）製、Ｔｒａｎｓｍｅｔａ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｓａｎｔａ  Ｃｌａｒａ、Ｃａｌｉｆｏｒｎｉａ）製ＣｒｕｓｏｅおよびＥｆｆｉｃｅｏｎシリーズのプロセッサ、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ（Ｗｈｉｔｅ  Ｐｌａｉｎｓ、Ｎｅｗ  Ｙｏｒｋ）製プロセッサのシリーズ、またはＡｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ（Ｓｕｎｎｙｖａｌｅ、Ｃａｌｉｆｏｒｎｉａ）製プロセッサのシリーズ等のマイクロプロセッサ装置によって提供される。
【００１４】
メインメモリ装置１０４は、Ｓｔａｔｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ（ＳＲＡＭ）、Ｂｕｒｓｔ  ＳＲＡＭまたはＳｙｎｃｈＢｕｒｓｔ  ＳＲＡＭ（ＢＳＲＡＭ）、Ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ（ＤＲＡＭ）、Ｆａｓｔ  Ｐａｇｅ  Ｍｏｄｅ  ＤＲＡＭ（ＦＰＭ  ＤＲＡＭ）、Ｅｎｈａｎｃｅｄ  ＤＲＡＭ（ＥＤＲＡＭ）、Ｅｘｔｅｎｄｅｄ  Ｄａｔａ  Ｏｕｔｐｕｔ  ＲＡＭ（ＥＤＯ  ＲＡＭ）、Ｅｘｔｅｎｄｅｄ  Ｄａｔａ  Ｏｕｔｐｕｔ  ＤＲＡＭ（ＥＤＯ  ＤＲＡＭ）、Ｂｕｒｓｔ  Ｅｘｔｅｎｄｅｄ  Ｄａｔａ  Ｏｕｔｐｕｔ  ＤＲＡＭ（ＢＥＤＯ  ＤＲＡＭ）、Ｅｎｈａｎｃｅｄ  ＤＲＡＭ（ＥＤＲＡＭ）、ｓｙｎｃｈｒｏｎｏｕｓ  ＤＲＡＭ（ＳＤＲＡＭ）、ＪＥＤＥＣ  ＳＲＡＭ、ＰＣ１００  ＳＤＲＡＭ、Ｄｏｕｂｌｅ  Ｄａｔａ  Ｒａｔｅ  ＳＤＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、Ｅｎｈａｎｃｅｄ  ＳＤＲＡＭ（ＥＳＤＲＡＭ）、ＳｙｎｃＬｉｎｋ  ＤＲＡＭ（ＳＬＤＲＡＭ）、Ｄｉｒｅｃｔ  Ｒａｍｂｕｓ  ＤＲＡＭ（ＤＲＤＲＡＭ）、または強誘電体ＲＡＭ（ＦＲＡＭ）等のデータを格納可能で、かつ任意の格納場所にマイクロプロセッサ１０２が直接アクセスすることのできる、１つ以上のメモリチップであり得る。図１Ａに図示された実施形態において、プロセッサ１０２は、システムバス１５０（以下により詳細に記載）を介してメインメモリ１０４と通信する。図１Ｂは、プロセッサがメモリポートを介してメインメモリ１０４と直接通信する、コンピュータシステム１００の実施形態を表す。例えば、図１Ｂにおいて、メインメモリ１０４は、ＤＲＤＲＡＭであり得る。
【００１５】
図１Ａおよび図１Ｂは、メインプロセッサ１０２がセカンダリバスを介してキャッシュメモリ１４０と直接通信し、「バックサイド（ｂａｃｋｓｉｄｅ）」バスと呼ばれることのある、実施形態を表す。別の実施形態において、メインプロセッサ１０２は、システムバス１５０を用いて、キャッシュメモリ１４０と通信する。キャッシュメモリ１４０は、典型的には、メインメモリ１０４よりも高速に応答し、典型的にはＳＲＡＭ、ＢＳＲＡＭ、またはＥＤＲＡＭによって提供される。
【００１６】
図１Ａに図示された実施形態において、プロセッサ１０２は、ローカルシステムバス１５０を介して、種々のＩ／Ｏデバイス１３０と通信する。ＶＥＳＡ  ＶＬバス、ＩＳＡバス、ＥＩＳＡバス、ＭｉｃｒｏＣｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＭＣＡ）バス、ＰＣＩバス、ＰＣＩ−Ｘバス、ＰＣＩ−Ｅｘｐｒｅｓｓバス、またはＮｕＢｕｓを含む、Ｉ／Ｏデバイス１３０へと中央処理装置１０２を接続するために、種々のバスを使用してもよい。Ｉ／Ｏデバイスがビデオディスプレイである実施形態の場合、プロセッサ１０２は、ディスプレイと通信するために、Ａｄｖａｎｃｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ（ＡＧＰ）を使用してもよい。図１Ｂは、メインプロセッサ１０２がＨｙｐｅｒＴｒａｎｓｐｏｒｔ、Ｒａｐｉｄ  Ｉ／Ｏ、またはＩｎｆｉｎｉＢａｎｄを介して、Ｉ／Ｏデバイス１３０ｂと直接通信する、コンピュータシステム１００の実施形態を表す。さらに、図１Ｂは、ローカルバスおよび直接通信が混在している実施形態を表し、プロセッサ１０２は、Ｉ／Ｏデバイス１３０ｂと直接通信しながら、ローカル相互接続バスを使って、Ｉ／Ｏデバイス１３０ａと通信する。
【００１７】
広範囲の種々のＩ／Ｏデバイス１３０が、コンピュータシステム１００に存在してもよい。入力デバイスは、キーボード、マウス、トラックパッド、トラックボール、マイクロフォン、および描画タブレットを含む。出力デバイスは、ビデオディスプレイ、スピーカ、インクジェットプリンタ、レーザプリンタ、および昇華型プリンタを含む。Ｉ／Ｏデバイスはさらに、ハードディスクドライブ、３．５インチ、５．２５インチディスクまたはＺＩＰディスク等のフロッピー（登録商標）ディスクを受け入れるフロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭドライブ、ＣＤ−Ｒ／ＲＷドライブ、ＤＶＤ−ＲＯＭドライブ、種々のフォーマットのテープドライブ、およびＴｗｉｎｔｅｃｈ  Ｉｎｄｕｓｔｒｙ，Ｉｎｃ．（Ｌｏｓ  Ａｌａｍｉｔｏｓ、Ｃａｌｉｆｏｒｎｉａ）製ＵＳＢ  Ｆｌａｓｈ  Ｄｒｉｖｅシリーズのデバイス等のＵＳＢストレージデバイス等、コンピュータシステム８００のための大容量ストレージを提供してもよい。
【００１８】
さらなる実施形態において、Ｉ／Ｏデバイス１３０は、システムバス１５０と外部通信バス（例えば、ＵＳＢバス、Ａｐｐｌｅ  Ｄｅｓｋｔｏｐバス、ＲＳ−１３２シリアル接続、ＳＣＳＩバス、ＦｉｒｅＷｉｒｅバス、ＦｉｒｅＷｉｒｅ８００バス、Ｅｔｈｅｒｎｅｔ（登録商標）バス、ＡｐｐｌｅＴａｌｋバス、Ｇｉｇａｂｉｔ  Ｅｔｈｅｒｎｅｔ（登録商標）バス、Ａｓｙｎｃｈｒｏｎｏｕｓ  Ｔｒａｎｓｆｅｒ  Ｍｏｄｅバス、ＨＩＰＰＩバス、Ｓｕｐｅｒ  ＨＩＰＰＩバス、ＳｅｒｉａｌＰｌｕｓバス、ＳＣＩ／ＬＡＭＰバス、ＦｉｂｒｅＣｈａｎｎｅｌバス、またはＳｅｒｉａｌ  Ａｔｔａｃｈｅｄ小型コンピュータシステムインタフェースバス）との間をつなぐものとしてもよい。
【００１９】
図１Ａおよび図１Ｂに示されている種類の汎用コンピュータは、典型的には、タスクのスケジューリングおよびシステムリソースへのアクセスを制御する、オペレーティングシステムの制御下で動作する。典型的なオペレーティングシステムには、中でも、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐ．（Ｒｅｄｍｏｎｄ、Ｗａｓｈｉｎｇｔｏｎ）製ＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）、Ａｐｐｌｅ  Ｃｏｍｐｕｔｅｒ（Ｃｕｐｅｒｔｉｎｏ、Ｃａｌｉｆｏｒｎｉａ）製ＭａｃＯＳ、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ（Ａｒｍｏｎｋ、Ｎｅｗ  Ｙｏｒｋ）製ＯＳ／２、およびＣａｌｄｅｒａ  Ｃｏｒｐ．（Ｓａｌｔ  Ｌａｋｅ  Ｃｉｔｙ、Ｕｔａｈ）が配布する無料のオペレーティングシステム、Ｌｉｎｕｘを含む。
【００２０】
携帯デバイスを備える実施形態の場合、デバイスは、全てＭｏｔｏｒｏｌａ  Ｃｏｒｐ．（Ｓｃｈａｕｍｂｕｒｇ、Ｉｌｌｉｎｏｉｓ）製ｉ５５ｓｒ、ｉ５８ｓｒ、ｉ８５ｓまたはｉ８８ｓ、京セラ（京都、日本）製６０３５または７１３５、あるいはＳａｍｓｕｎｇ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｃｏ．，Ｌｔｄ．（Ｓｅｏｕｌ、Ｋｏｒｅａ）製ｉ３００またはｉ３３０等のＪＡＶＡ（登録商標）を有効化したセル式電話にしてもよい。携帯デバイスを備える別の実施形態において、携帯デバイスは、全てｐａｌｍＯｎｅ，Ｉｎｃ．（Ｍｉｌｐｉｔａｓ、Ｃａｌｉｆｏｒｎｉａ）製Ｔｕｎｇｓｔｅｎ  Ｗ、ＶＩＩ、ＶＩＩｘ、ｉ７０５等のＰａｌｍＯＳオペレーティングシステムの制御下によって動作するパーソナルデジタルアシスタント（ＰＤＡ）にしてもよい。さらなる実施形態において、クライアント１１３は、全てＨｅｗｌｅｔｔ−Ｐａｃｋａｒｄ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｐａｌｏ  Ａｌｔｏ、Ｃａｌｉｆｏｒｎｉａ）製ｉＰＡＱ４１５５、ｉＰＡＱ５５５５、ｉＰＡＱ１９４５、ｉＰＡＱ２２１５およびｉＰＡＱ４２５５、ＶｉｅｗＳｏｎｉｃ（Ｗａｌｎｕｔ、Ｃａｌｉｆｏｒｎｉａ）製ＶｉｅｗＳｏｎｉｃ  Ｖ３６、または、Ｔｏｓｈｉｂａ  Ａｍｅｒｉｃａ，Ｉｎｃ．（Ｎｅｗ  Ｙｏｒｋ、Ｎｅｗ  Ｙｏｒｋ）製Ｔｏｓｈｉｂａ  ＰｏｃｋｅｔＰＣ  ｅ４０５等の、ＰｏｃｋｅｔＰＣオペレーティングシステムの制御下において動作するパーソナルデジタルアシスタント（ＰＤＡ）としてもよい。さらに別の実施形態において、携帯デバイスは、全てｐａｌｍＯｎｅ，Ｉｎｃ．（Ｍｉｌｐｉｔａｓ、Ｃａｌｉｆｏｒｎｉａ）製Ｔｒｅｏ  １８０、Ｔｒｅｏ  ２７０、Ｔｒｅｏ  ６００、Ｔｒｅｏ  ６５０、Ｔｒｅｏ  ７００、またはＴｒｅｏ  ７００ｗ等のＰＤＡと電話デバイスの組合せデバイスである。また別のさらなる実施形態において、携帯デバイスは、Ｍｏｔｏｒｏｌａ  Ｃｏｒｐ製ＭＰｘ２００等のＰｏｃｋｅｔＰＣオペレーティングシステムの制御下において動作するセル式電話である。典型的な携帯デバイスは、プロセッサ１０２およびメインメモリ１０４を含む、図１Ａおよび図１Ｂ中において上述されているエレメントの多くを備えてもよい。
【００２１】
図２は、クライアント−サーバネットワークで動作するネットワークアプライアンス（ａｐｐｌｉａｎｃｅ）の実施形態を示すブロック図を表している。概観として、多数のクライアント２１３ａ、２１３ｂ、・・・２１３ｎ’（これら全部を２１３と称する）が、ネットワーク２１１を介してネットワークアプライアンス２０９に接続されており、このネットワークアプライアンス２０９は、多数のサーバ２０５ａ、２０５ｂ、２０５ｎ（これら全部を２０５と称する）を備えるネットワーク２１１’に接続されている。クライアント２１３、ネットワーク２１１、サーバ２０５、およびネットワークアプライアンス２０９は、本明細書に記載されているものと実質的に同様の能力、種類、機能、および構成を備える任意のコンピュータデバイスを備えてもよい。
【００２２】
引き続き、より詳細に図２を参照すると、多数のサーバ２０５へネットワーク２１１’を介して接続されるネットワークアプライアンス２０９が示されている。図示された実施形態において、サーバ２０５は、スタンドアロンコンピュータサーバ、ブレードサーバ、ラックマウント式サーバ、または任意の種類の上記サーバのグループを含む、情報の処理および情報の送受信が可能な任意のデバイスを備えてもよい。サーバは、データベース、ファイルサーバ、ウェブサーバ、アプリケーションサーバまたは任意のその他の種類のサーバをさらに備えてもよい。複数のサーバを含む実施形態において、サーバは、同一のサーバであり得、またはメーカー、モデル、種類、コンテンツ、パフォーマンス、利用可能性、または任意のその他の局面において異なってもよい。
【００２３】
ネットワークアプライアンス２０９は、限定としてではなく、ファイアウォールサービス、ＳＳＬプーリング（ｐｏｏｌｉｎｇ）および加速、ＴＣＰプーリングおよび加速、データ圧縮、接続モニタリング、アプリケーションロギング、アプリケーション加速、アプリケーション配信、負荷均衡、キャッシング、仮想化、変換、リダイレクション、接続プーリング、プロキシサービス、逆プロキシサービス、認証、およびセッション管理を含む、クライアント２１３へのサービス提供に関連する任意の機能を実行してもよい。いくつかの実施形態において、ネットワークアプライアンス２０９は、サーバ２０５と同じ物理的マシン上に常駐してもよい。いくつかの実施形態において、ネットワークアプライアンス２０９は、プロセッサ、ディスクスペース、ＲＡＭ、または任意のその他のコンピューティングリソースをサーバ２０５と共有してもよい。
【００２４】
図示された実施形態において、ネットワークアプライアンス２０９は、ネットワーク２１１、２１１’に接続される。ネットワーク２１１、２１１’は、インターネット、ローカルネットワーク、ウェブサーバ、ファイルサーバ、ルータ、データベース、コンピュータ、サーバ、ネットワークアプライアンス、または任意のその他の情報の送受信が可能なコンピュータデバイスを備えてもよい。ネットワーク２１１、２１１’は、ケーブル、ＩＲポート、ワイヤレスシグナル、または複数のコンピュータデバイスに接続する任意のその他の手段を介して接続されるコンピュータデバイスを備えてもよい。ネットワーク２１１、２１１’およびネットワークに接続される任意のデバイスは、ＳＳＬ、ＨＴＭＬ、ＸＭＬ、ＲＤＰ、ＩＣＡ、ＦＴＰ、ＨＴＴＰ、ＴＣＰ、ＩＰ、ＵＤＰ、ＩＰＸ、ＳＰＸ、ＮｅｔＢＩＯＳ、ＮｅｔＢＥＵＩ、ＳＭＢ、ＳＭＴＰ、Ｅｔｈｅｒｎｅｔ（登録商標）、ＡＲＣＮＥＴ、ファイバ分散データインタフェース（ＦＤＤＩ）、ＲＳ２３２、ＩＥＥＥ８０２．１１、ＩＥＥＥ８０２．１１ａ、ＩＥＥ８０２．１１ｂ、ＩＥＥＥ８０２．１１ｇおよび直接非同期接続、または任意のそれらの組み合わせを限定としてではなく含む、コンピュータデバイスの間でまたはコンピュータデバイス内で通信するために使用される任意の通信プロトコルを介して通信してもよい。ネットワーク２１１、２１１’は、任意のプロトコル、あるいはＡＭＰＳ、ＴＤＭＡ、ＣＤＭＡ、ＧＳＭ、ＧＰＲＳまたはＵＭＴＳを含む、携帯デバイスの間で通信するために使用されるプロトコルを利用する、携帯電話ネットワークを備えてもよい。ネットワーク２１１、２１１’は物理的に別個のネットワークを備えてもよい、またはネットワーク２１１、２１１’は同じネットワークを備えてもよい、および任意の方法で接続してもよい。いくつかの実施形態において、ネットワーク２１１’経由で通信するデバイスは、特殊な、またはネットワーク２１１を介して通信するデバイスとは異なるプロトコルを使用してもよい。
【００２５】
上記のデバイスのいずれかにおけるＴＣＰ／ＩＰベースの通信を含む実施形態において、Ｍｅｓｓａｇｉｎｇ  Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ（ＭＡＰＩ）（電子メール）、Ｆｉｌｅ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ（ＦＴＰ）、ＨｙｐｅｒＴｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ（ＨＴＴＰ）、Ｃｏｍｍｏｎ  Ｉｎｔｅｒｎｅｔ  Ｆｉｌｅ  Ｓｙｓｔｅｍ（ＣＩＦＳ）プロトコル（ファイル伝送）、Ｉｎｄｅｐｅｎｄｅｎｔ  Ｃｏｍｐｕｔｉｎｇ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＩＣＡ）プロトコル、Ｒｅｍｏｔｅ  Ｄｅｓｋｔｏｐ  Ｐｒｏｔｏｃｏｌ（ＲＤＰ）、Ｗｉｒｅｌｅｓｓ  Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ（ＷＡＰ）、Ｍｏｂｉｌｅ  ＩＰプロトコル、およびＶｏｉｃｅ  Ｏｖｅｒ  ＩＰ（ＶｏＩＰ）プロトコルを含む、任意のＴＣＰ／ＩＰベースのプロトコルを使用してもよい。修正トランスポート制御プロトコル等の、任意の種類および形式のトランスポート制御プロトコル、例えば、Ｔｒａｎｓａｃｔｉｏｎ  ＴＣＰ（Ｔ／ＴＣＰ）、選択確認応答（ｓｅｌｅｃｔｉｏｎ  ａｃｋｎｏｗｌｅｄｇｅｍｅｎｔ）を有するＴＣＰ（ＴＣＰＳＡＣＫ）、大型ウィンドウを有するＴＣＰ（ＴＣＰ−ＬＷ）、ＴＣＰ−ＶｅｇａｓプロトコルおよびＴＣＰスプーフィング（ｓｐｏｏｆｉｎｇ）プロトコル等の輻輳予測プロトコルも使用してもよい。別の実施形態において、ＵＤＰ  ｏｖｅｒ  ＩＰ等の任意の種類および形式のユーザデータグラムプロトコル（ＵＤＰ）を使用してもよい。
【００２６】
次に図３を参照すると、以前に格納されたファイルへの効率的な更新を作成するための方法の一実施形態が示されている。図３はネットワークアプライアンス２０９およびクライアント２１３によって実行中のコンテキストにおける方法を表しているが、本方法は、単体または任意の組み合わせで本明細書に記載されているコンピュータデバイスのいずれかによって実行してもよい。概観的に、この方法は、第１の複数のデータシーケンスを含む第１のファイルを受信する（ステップ３０１）ことと、クライアントに該第１のファイルを伝送する（ステップ３０３）ことと、第２の複数のデータシーケンスを含む第２のファイルを受信する（ステップ３０９）ことと、複数のエントリを有するハッシュテーブルを作成することであって、該複数のエントリのそれぞれは、該第１の複数のシーケンスのそれぞれの１つに対応し、該エントリの少なくとも２つは、重複するデータシーケンスに対応する、作成する（ステップ３１１）ことと、該第２の複数のデータシーケンスのハッシュ値を計算する（ステップ３１３）ことと、該第２の複数のデータシーケンスのそれぞれを、同じハッシュ値を有する該第１の複数のシーケンスからのシーケンスと比較して、両方のファイルに存在するデータシーケンスを判断する（ステップ３１５）ことと、該第１のファイルおよび該第２のファイルの両方に存在する該データシーケンスの長さおよび位置の表示を格納する（ステップ３１７）ことと、該第２のファイルからのデータシーケンスと、該第１のファイルおよび該第２のファイルの両方に存在する該データシーケンスの位置および長さの表示とを含む第３のファイルを作成する（ステップ３１９）ことと、クライアントに該第３のファイルを伝送する（ステップ３２１）こととを包含する。
【００２７】
引き続き図３を参照し、より詳細に説明すると、ネットワークアプライアンス２０９は、第１の複数のデータシーケンスを含む第１のファイルを受信する（ステップ３０１）。いくつかの実施形態において、第１のファイルは、ネットワーク２１１’、サーバ２０５、データベース、またはそれらの任意の組み合わせから受信してもよい。いくつかの実施形態において、第１のファイルは、ディスクまたはその他の格納媒体から読み込むか、キャッシュから取得するか、またはＲＡＭからアクセスしてもよい。別の実施形態において、第１のファイルは、ネットワークアプライアンス２０９上で実行されるアプリケーションまたはプロセスから受信してもよい。
【００２８】
第１のファイルは、ファイルを構成するビットまたはバイトシーケンスに対応するデータシーケンスを含んでもよい。第１のファイルは、ＨＴＭＬ、ＸＭＬ、ＷＭＬ、ＳＶＧ、その他のドキュメントプロトコル、イメージファイルプロトコル、サウンドファイルプロトコル、ビデオファイルプロトコル、およびバイナリファイルプロトコルを限定としてではなく含む、任意のファイルプロトコルを含んでもよい。いくつかの実施形態において、ファイルは、ウェブページまたはウェブページの一部分を含む。いくつかの実施形態において、ファイルは、ニュースページ、ウェブアプリケーションページ、チャットルーム、掲示板、スポーツページ、電子メールのページ、ディレクトリリスト、トラッキングページ、およびウェブカメラページを限定としてではなく含む、ある頻度で更新される任意のウェブページを含んでいる。第１のファイルを受信後、ネットワークアプライアンス２０９は、後で取得が可能なように第１のファイルを格納またはキャッシュする。いくつかの実施形態において、ネットワークアプライアンス２０９は、本明細書に記載されたネットワークアプライアンスの機能のいずれかによって、該第１のファイルを修正してもよい。
【００２９】
いくつかの実施形態において、第１のファイルを受信（ステップ３０１）後、ネットワークアプライアンス２０９は、第１のファイルをクライアントに伝送する（ステップ３０３）。ネットワークアプライアンス２０９は、ネットワークのいずれか、または本明細書に記載されたプロトコルを介して、本明細書に記載されたクライアントのいずれかに、第１のファイルを伝送してもよい。ネットワークアプライアンス２０９は、圧縮、加速および暗号化を含む、ネットワークアプライアンスによって実行される機能のいずれかに従がって、第１のファイルを修正してもよい。図３はステップ３０１の後すぐに第１のファイルを伝送するネットワークアプライアンス２０９を表しているが、別の実施形態において、該伝送は、ネットワークアプライアンス２０９が、第１のファイルを受信（ステップ３０１）した後に実行されるステップ（ステップ３０５〜ステップ３２１）のいずれかの後に行うこともできる。
【００３０】
いくつかの実施形態において、ネットワークアプライアンス２０９は、該伝送の記録を格納してもよい。該記録は、データベースまたはキャッシュを含む任意のメモリエレメントに格納してもよい。一実施形態において、ネットワークアプライアンス２０９は、所与のファイルがクライアントに以前伝送されているかどうかを判断するために、該キャッシュにアクセスしてもよい。一実施形態において、該記録は、定められた時間量の後に期限切れとなるよう設定してもよい。例えば、ネットワークアプライアンス２０９が、所与のクライアント２１３が１日の終わりにそのキャッシュから全てのファイルを削除することを示す情報を有する場合、ネットワークアプライアンスは、クライアント２１３に伝送されたファイルの全記録が１日の終わりに期限切れとなるように設定してもよい。
【００３１】
図示された実施形態において、ネットワークアプライアンス２０９が第１のファイルをクライアント２１３に伝送（ステップ３０３）した後、クライアントは、次に、第１のファイルを受信（ステップ３０５）し、第１のファイルを表示（ステップ３０７）し、第１のファイルを格納（ステップ３０８）してもよい。クライアントは、本明細書に記載された実施形態のいずれかによって、こうしたステップを実行してもよい。
【００３２】
図示された実施形態において、ネットワークアプライアンス２０９がクライアント２１３に第１のファイルを伝送（ステップ３０３）した後、ネットワークアプライアンスは、第２の複数のデータシーケンスを含む第２のファイルを受信する（ステップ３０９）。別の実施形態において、ネットワークアプライアンス２０９は、クライアントへの第１のファイルの伝送（ステップ３０３）時または伝送前に第２のファイルを受信する（ステップ３０９）。第２のファイルは、本明細書に記載されているファイルの種類、プロトコル、ウェブページおよびウェブページの一部分のいずれかを含んでもよい。第２のファイルを受信後、ネットワークアプライアンス２０９は、後で取得が可能なよう、第２のファイルを格納またはキャッシュしてもよい。いくつかの実施形態において、ネットワークアプライアンス２０９は、本明細書に記載されたネットワークアプライアンスの機能のいずれかによって該第２のファイルを修正してもよい。
【００３３】
第２の複数のデータシーケンスを含む第２のファイルを受信（ステップ３０９）後、ネットワークアプライアンスは、複数のエントリを有するハッシュテーブルを生成してもよく、複数のエントリのそれぞれは、第１の複数のシーケンスのそれぞれの１つに対応し、該エントリの少なくとも２つは、重複するデータシーケンスに対応する（ステップ３１１）。該ハッシュテーブルは、データシーケンスまたはデータシーケンスへの参照をエントリとして格納するための機能性を提供し、次に所与のシーケンスと一致するエントリの該テーブルを効率的に検索する、任意の公知のハッシュテーブルアルゴリズムによって、作成されてもよい。別の実施形態において、ネットワークアプライアンスは、第２のファイルの受信前または受信時（ステップ３０９）においてハッシュテーブルを作成してもよい（ステップ３１１）。
【００３４】
いくつかの実施形態において、ハッシュテーブルのエントリは、バイトシーケンスを含む第１のファイルからのデータシーケンスに対応してもよい。バイトシーケンスは任意の長さにしてもよい。一実施形態において、シーケンスは４バイトのシーケンスである。
【００３５】
図示された実施形態において、ハッシュテーブルエントリの少なくとも２つは重複するデータシーケンスに対応する。重複するシーケンスは、共通の任意の数のバイトを有してもよい。例えば、ファイルがシーケンス「ａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐ」を含む場合には、重複する４バイトシーケンスの例は、「ｃｄｅｆ」および「ｆｇｈｉ」に加えて、「ｃｄｅｆ」および「ｄｅｆｇ」を含む。一実施形態において、ハッシュテーブルエントリは、連続する重複するバイトシーケンスに対応する。例えば、ファイルにシーケンス「ａｂｃｄｅｆｇ」を含む場合、少なくとも２つの連続する重複する４バイトのシーケンスを含むハッシュテーブルは、シーケンス「ａｂｃｄ」「ｂｃｄｅ」「ｃｄｅｆ」および「ｄｅｆｇ」に対応するエントリを含んでもよい。
【００３６】
いくつかの実施形態において、所与の時間におけるハッシュテーブルエントリは、第１のファイルの所与の部分または「ウィンドウ」のデータシーケンスに対応するのみでもよい。これにより、ハッシュテーブルのサイズを、ファイル全体が一度にハッシュされた場合のハッシュテーブルのサイズよりも小さくすることができる。いくつかの実施形態において、第１のファイルの最初のＸバイトのみがハッシュされ、そして次に、ある状態が生じると、Ｙ個のエントリがテーブルから取り除かれ、続いてＹ個よりも多いエントリがテーブルに追加される。一実施形態において、６４キロバイトのウィンドウサイズが使用され、特定の状態が生じた場合に、ウィンドウは３２キロバイトずつ移動される。この実施形態において、第１のファイルの最初の６４キロバイトからのシーケンスがハッシュされ、次に、特定の状態が生じた際に、ファイルの最初の３２キロバイトからのシーケンスに対応するエントリが取り除かれ、ファイルの次の３２キロバイトからのシーケンスに対応するエントリが追加される。
【００３７】
ハッシュウィンドウが移動する状態は、ハッシュアルゴリズムの実行時間、パフォーマンス、または圧縮が改善される任意の状態にしてもよい。一実施形態において、ウィンドウは、ウィンドウの所与の半分において、シーケンスの８５％超の一致が見つかった場合に移動される。別の実施形態において、ウィンドウは、第２のファイルの所与のパーセンテージを既存のハッシュエントリと比較した場合に移動される。一実施形態において、ウィンドウは、ハッシュ値が計算され、第１のファイルと比較される第２のファイルのつりあう部分と比較した場合に移動される。例えば、第１のファイルが１００キロバイトであり、第２のファイルが８０キロバイトである場合、第２のファイルの８０／１００＊６４キロバイトをハッシュテーブルのシーケンスと比較する際に、ハッシュウィンドウを移動してもよい。
【００３８】
ネットワークアプライアンス２０９がハッシュテーブルを作成した（ステップ３１１）後、ネットワークアプライアンス２０９は、次に、該第２の複数のデータシーケンスのハッシュ値を計算してもよい（ステップ３１３）。該ハッシュ値は、第１の複数のシーケンスのハッシュ値を計算するために使用される同じ方法によって計算してもよい。ネットワークアプライアンス２０９は、ネットワークアプライアンスが第１のファイルからのデータシーケンスを選択するのと同様に、第２のファイルからのデータシーケンスを選択してもよい。例えば、ネットワークアプライアンス２０９が第１のファイルからの連続する重複する４バイトのシーケンスに対応するハッシュテーブルエントリを作成する場合、ネットワークアプライアンスは、第２のファイルからの連続する重複する４バイトのシーケンスのハッシュ値を計算するように選択してもよい。
【００３９】
第２の複数のデータシーケンスのいくつかまたは全てのハッシュ値を計算（ステップ３１３）後、ネットワークアプライアンス２０９は、第２の複数のデータシーケンスのそれぞれを、両方のファイルに存在するデータシーケンスを判断する（ステップ３１５）ために、同じハッシュ値を有する第１の複数のシーケンスからのシーケンスと比較してもよい。ネットワークアプライアンスは、現在使用可能な任意のハッシュアルゴリズムによって、このステップを実行してもよい。該比較は、より長い一致を判断するために、一致するシーケンスの後続のバイトの比較を含んでもよい。例えば、第１のファイルはシーケンス「ａｂｃｄｅｆｇｈｉｊｋｌｍｎｏ」を含んでもよく、第２のファイルはシーケンス「ｚｙｘｗｖｕｔｃｄｅｆｇｈｉｔｕｖ」を含んでもよい。ハッシングが連続する４バイトのシーケンス上で行われる場合、ネットワークアプライアンス２０９は、両方のファイルにシーケンス「ｃｄｅｆ」が存在することを判断してもよい。ネットワークアプライアンス２０９は、次に、両方のファイルにシーケンス「ｃｄｅｆｇｈｉ」が存在することを判断するために、一致するシーケンスの後続のバイトを比較してもよい。このため、いくつかの実施形態において、両方のファイルに存在すると判断されるシーケンスの長さは、ハッシュ値が計算されるシーケンスの長さとは異なってもよい。いくつかの実施形態において、一致するシーケンスの最小および最大長を設定してもよい。
【００４０】
両方のファイルに存在するデータシーケンスを判断した（ステップ３１５）後、ネットワークアプライアンス２０９は、第１および第２のファイルの両方に存在する該データシーケンスの長さおよび位置の表示を格納してもよい（ステップ３１７）。ネットワークアプライアンス２０９は、キャッシュ、ＲＡＭ、ディスク、またはテープを含む、任意のストレージ媒体において該表示を格納してもよい。いくつかの実施形態において、ネットワークアプライアンス２０９は、ネットワークアプライアンス２０９自体に該表示を格納してもよい。別の実施形態において、ネットワークアプライアンス２０９は、別のコンピュータデバイス１００上に該表示を格納してもよい。いくつかの実施形態において、ネットワークアプライアンス２０９が、第２の複数のデータシーケンスのそれぞれを同じハッシュ値（ステップ３１３）を有する第１の複数のシーケンスからのシーケンスと比較しながら、データシーケンスの長さおよび位置を格納してもよい。別の実施形態において、格納される所与のシーケンスの長さおよび位置について、最小長を必要としてもよい。一実施形態において、最小長は、４バイトとなるように指定してもよい。
【００４１】
両方のファイルに存在する該シーケンスの長さおよび位置の表示は、シーケンスの長さおよび位置を識別する任意の表示を含んでもよい。いくつかの実施形態において、該シーケンスの位置は、ファイル内の絶対的な位置として格納される。別の実施形態において、該シーケンスの位置は、該第１のファイル内の所与の参照ポインタに対して相対的な位置として格納される。一実施形態において、該参照ポインタは固定してもよく、別の実施形態において、該参照ポインタはルールセット（ｒｕｌｅ  ｓｅｔ）によって移動してもよい。
【００４２】
一実施形態において、参照ポインタは、最初は、第１のファイルの始まりを示すように設定してもよい。ポインタは、次に、５バイトよりも長い一致するシーケンスが見つかるたびに、インクリメントしてもよい。ポインタは、次に、第１のファイルの一致するシーケンスの最後のバイトに１つ加えたバイトを指すようにインクリメントしてもよい。この実施形態において、両方のファイルに存在する該シーケンスの位置は、参照ポインタの位置から正または負の位置の、所与の数のバイトとして格納される。
【００４３】
いくつかの実施形態において、一致するシーケンスの長さおよび位置は、固定した長さ整数（ｌｅｎｇｔｈ  ｉｎｔｅｇｅｒ）として格納される。一実施形態において、一致するシーケンスの長さは、１バイトの整数として格納され、ここで整数は、４バイトから１０２７バイトの間の長さを表す。この実施形態において、一致するシーケンスのバイト長は、４の倍数に制限される。別の実施形態において、該シーケンス長さを格納するために、任意のその他のビットまたはバイト長の整数を使用してもよい。さらに別の実施形態において、最小長および最大長を含み、バイト長を所与の倍数に制限する任意のその他の制限を、一致するシーケンスのバイト長に課してもよい。さらに別の実施形態において、一致するシーケンスの長さは、可変の長さ整数として格納してもよい。いくつかの実施形態において、一致するシーケンスの位置は、変更可能な長さ整数として格納してもよい。別の実施形態において、一致するシーケンスの位置は、所与のバイトまたはビット長の固定した長さ整数として格納される。
【００４４】
ネットワークアプライアンス２０９が、第１および第２のファイルの両方に存在する該データシーケンスの長さおよび位置の表示を格納（ステップ３１７）した後、ネットワークアプライアンス２０９は、第２のファイルからのデータシーケンスと、第１および第２のファイルの両方に存在する該データシーケンスの位置および長さの表示とを含む第３のファイルを作成してもよい。該生成（ステップ３１７）は、一致するシーケンスの全ての長さおよび位置が格納された後で実行してもよく、または該生成（３１７）は、一致するシーケンスが見つかると同時に実行してもよい。第３のファイルは、本明細書に記載されている任意のフォーマットの長さおよび位置の表示を含んでもよい。いくつかの実施形態において、共有するシーケンスの長さおよび位置は、特殊バイトまたはビットシーケンスの後にしてもよい。
【００４５】
例えば、第１のファイルがストリング「ａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐ」を含み、第２のファイルがストリング「ｘｘｘｘｘｘｘｄｅｆｇｈｉｊｋｘｘｘｘｘｘｃｄｅｆｘｘｘ」を含む場合、第３のファイルは、シーケンス「ｘｘｘｘｘｘｘ３，８ｘｘｘｘｘｘ２，４ｘｘｘ」を含んでもよい。この例において、３，８は、バイト３で開始し、８バイト長の第１のファイルからのシーケンスを示す表示を表すよう使用される（いくつかの実施形態において、この表示は、２つの固定長の２進整数としてもよい）。同様に、２，４は、バイト２で開始し、４バイト長の第１のファイルからのシーケンスを示す表示を表す。
【００４６】
別の例として、第１のファイルがストリング「ａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐ」を含み、第２のファイルがストリング「ｘｘｘｘｘｘｘｄｅｆｇｈｉｊｋｘｘｘｘｘｘｃｄｅｆｘｘｘ」を含む場合、第３のファイルは、シーケンス「ｘｘｘｘｘｘｘ３，８ｘｘｘｘｘｘ−９，４ｘｘｘ」を含んでもよい。この例において、共有シーケンスの位置は、参照ポインタからの相対的な距離として格納され、上記に記載されている方法によってインクリメントされる。この例において、ネットワークアプライアンス２０９は、参照ポインタが最初に、第１のファイルの始まりを示すことから、前の例と同様に、第１の一致するシーケンスを示す。参照ポインタはこうして、第１のファイルの一致するシーケンスの最後のバイトに１つ加えたバイトの位置を示すようインクリメントされる。このため、第２の一致するシーケンスは−９，４で示され、これは、第２の一致するシーケンスが、第１のファイルの以前に一致したシーケンスの後のバイトの９バイト前に生じることを示す。
【００４７】
一実施形態において、第３のファイルは、ＡＳＣＩＩ等のバイトプロトコルに符号化してもよい。一実施形態において、バイナリデータの７バイトの各グループを、８バイトのＡＳＣＩＩ文字に符号化してもよい。この変換は、任意の公知の変換方法によって行ってもよい。ＡＳＣＩＩ文字は、ＩＳＯ−８８５９−１を含む任意の既存の文字セットの定義に対応してもよい。いくつかの実施形態において、第３のファイルは、ＨＴＭＬファイルを含んでもよい。一実施形態において、第３のファイルは、第２のファイルからの該データシーケンスと、第１および第２のファイルの両方に存在する該データシーケンスの位置および長さの表示とを含むＪａｖａ（登録商標）ｓｃｒｉｐｔ変数を含んでもよい。一実施形態において、第３のファイルはまた、該Ｊａｖａ（登録商標）ｓｃｒｉｐｔ変数を処理することによって、該第２のファイルをアセンブルするための機能性を備えるＪａｖａ（登録商標）ｓｃｒｉｐｔ機能を含んでもよい。別の実施形態において、第３のファイルは、該機能性を備えるＪａｖａ（登録商標）ｓｃｒｉｐｔ機能への参照を含んでもよい。
【００４８】
以下のＨＴＭＬコード、
＜ＨＴＭＬ＞
＜ＨＥＡＤ＞
＜ＳＣＲＩＰＴ＞
ｖａｒ  ｕｐｄａｔｅＦｉｌｅ  ＝  “〜〜〜〜〜  ”
＜ＳＣＲＩＰＴ＞
＜／ＨＥＡＤ＞
＜ＢＯＤＹ  ｏｎｌｏａｄ＝ｃｒｅａｔｅＰａｇｅ（  ｕｐｄａｔｅＦｉｌｅ  ）＞
＜／ＢＯＤＹ＞
＜／ＨＴＭＬ＞
は、クライアントに伝送され得る第３のファイルの一例を示す。
【００４９】
上記の例において、ＨＴＭＬファイルは、「ｕｐｄａｔｅＦｉｌｅ」という名前のＪａｖａ（登録商標）ｓｃｒｉｐｔ変数を含んでいる。該変数は、第２のファイルからのデータシーケンスと、第１および第２のファイルの両方に存在する該データシーケンスの位置および長さの表示とを含んでもよい。上記の例はさらに、「ｃｒｅａｔｅＰａｇｅ」という名前のＪａｖａ（登録商標）ｓｃｒｉｐｔ機能への呼び出しを含んでいる。ＨＴＭＬファイルによって含まれてもよく、またはクライアント上に格納されてもよい該機能は、Ｊａｖａ（登録商標）ｓｃｒｉｐｔ変数「ｕｐｄａｔｅＦｉｌｅ」からのデータを使用して該第２のファイルのアセンブルのための機能性を備えてもよい。上記の例において、標準的なＨＴＭＬブラウザは、ＨＴＭＬページのローディングの際に「ｃｒｅａｔｅＰａｇｅ」関数を実行する。「ｃｒｅａｔｅＰａｇｅ」関数はまた、第２のファイルがアセンブルされると、該第２のファイルを表示するためにＨＴＭＬページを変更するための機能性を備えてもよい。
【００５０】
第２のファイルからのデータシーケンスと、第１および第２のファイルの両方に存在する該データシーケンスの位置および長さの表示とを含む第３のファイルの作成（ステップ３１９）後、ネットワークアプライアンス２０９は、クライアントに第３のファイルを伝送（ステップ３２１）してもよい。該伝送は、ネットワークのいずれかによって、および本明細書に記載されている方法によって実行してもよい。ネットワークアプライアンス２０９は、圧縮、加速および暗号化を含む、ネットワークアプライアンス２０９によって実行される任意の機能によって、第３のファイルを修正してもよい。
【００５１】
第３のファイルをクライアントに伝送（ステップ３２１）後、クライアント２１３は、第３のファイルを受信し（ステップ３２３）、第２のファイルからのデータシーケンスと、第３のファイルによって示される第１のファイルのシーケンスとを含む第２のファイルを再作成するためにＪａｖａ（登録商標）ｓｃｒｉｐｔ機能を実行し（ステップ３２５）、第２のファイルを表示してもよい（ステップ３２７）。クライアント２１３は、本明細書に記載された実施形態のいずれかによって、こうしたステップを実行してもよい。
【００５２】
次に図４を参照すると、以前に格納されたファイルに対して効率的な更新を作成するための方法の別の実施形態を表す流れ図が示される。概観的に、該方法は、第１のファイルの重複するデータシーケンスに対応するエントリを有するハッシュテーブルを作成する（ステップ３１１）ことと、該第１のファイルの始まりに参照ポインタを設定する（ステップ４０１）ことと、第２のファイルのデータシーケンスのハッシュ値を計算する（ステップ３１３）ことと、両方のファイルに該シーケンスが存在するかどうか判断する（ステップ３１５）こととを包含する。方法は次に、第２のファイルの次のシーケンスに移動する（ステップ４０９）ことか、または一致するシーケンスの全体長を判断する（ステップ４０３）ことのどちらかと、該長さが最小閾値を超えるかどうか判断する（ステップ４０５）こととを含んでもよい。方法は次に、第２のファイルの次のシーケンスに移動する（ステップ４０９）ことか、または参照ポインタに対する一致するシーケンスの長さおよび位置を格納する（ステップ３１７）ことのどちらかを含んでもよい。方法は次に、第１のファイルの一致するシーケンスの最後のバイトに１つ加えたバイトに参照ポインタを設定する（ステップ４０７）ことと、第２のファイルの次のシーケンスに移動する（ステップ４０９）こととを含んでもよい。図示された実施形態において、方法は、ネットワークアプライアンス２０９によって実行してもよい。
【００５３】
引き続き図４を参照し、より詳細に説明すると、ネットワークアプライアンス２０９は、第１のファイルの重複するデータシーケンスに対応するエントリを有するハッシュテーブルを作成する（ステップ３１１）。このステップは、本明細書に記載されたハッシュテーブルを作成するための方法のいずれかによって実行してもよい。
【００５４】
第１のファイルの重複するデータシーケンスに対応するエントリを有するハッシュテーブルを作成（ステップ３１１）後、ネットワークアプライアンス２０９は、該第１のファイルの始まりへの参照ポインタを設定してもよい（ステップ４０１）。参照ポインタは、任意の種類のポインタを含んでもよい。
【００５５】
該第１のファイルの始まりへの参照ポインタを設定（ステップ４０１）後、ネットワークアプライアンス２０９は、第２のファイルのデータシーケンスのハッシュ値を計算してもよい（ステップ３１３）。このステップは、本明細書に記載されたハッシュ値を計算する方法のいずれかによって実行してもよい。
【００５６】
第２のファイルのデータシーケンスのハッシュ値を計算（ステップ３１３）後、ネットワークアプライアンス２０９は、該シーケンスが両方のファイルに存在するかどうかを判断してもよい（ステップ３１５）。このステップは、本明細書に記載された方法のいずれかによって実行してもよい。
【００５７】
シーケンスが両方のファイルに存在しない場合、ネットワークアプライアンス２０９は、第２のファイルの次のシーケンスに移動してもよい（４０９）。該次のシーケンスは、第２のファイルの所与のシーケンスの後で実行される任意のシーケンスを含んでもよい。一実施形態において、次のシーケンスは、以前のシーケンスの１バイト後から開始するシーケンスとしてもよい。別の実施形態において、次のシーケンスは、以前のシーケンスの後の任意のその他の数のバイトから開始するシーケンスとしてもよい。いくつかの実施形態において、第２のファイルの次のシーケンスへの移動（ステップ４０９）は、本明細書において上記されたように、ハッシュウィンドウを移動させることによって、付随して起こるようにしてもよい。次のシーケンスが存在しない場合には、方法を終了してもよい。
【００５８】
両方のファイルにシーケンスが存在する場合、ネットワークアプライアンス２０９は、一致するシーケンスの後続のバイトを比較することによって、一致するシーケンスの全体長を判断してもよい（ステップ４０３）。全体長は、本明細書に記載された方法のいずれかによって判断してもよい。
【００５９】
ネットワークアプライアンス２０９は、次に、一致するシーケンスの全体長が所与の閾値を超えるかどうかを判断してもよい（ステップ４０５）。この判断は、本明細書に記載された方法のいずれかによって行ってもよい。一致するシーケンスの長さが最小閾値を超えない場合、ネットワークアプライアンス２０９は、第２のファイルの次のシーケンスに移動してもよい。
【００６０】
長さが最小閾値を超える場合、ネットワークアプライアンス２０９は、次に、本明細書に記載されている方法のいずれかによって、所与の参照ポインタに対する一致するシーケンスの長さおよび位置を格納してもよい。ネットワークアプライアンス２０９は、次に、本明細書に記載された方法のいずれかによって参照ポインタをインクリメントしてもよい（ステップ４０７）。ネットワークアプライアンス２０９は、次に、第２のファイルの次のシーケンスに移動してもよい（ステップ４０９）。
【００６１】
次に図５を参照すると、以前に格納されたファイルへの更新を効率的に受信する方法の一実施形態が図示されている。概観として、該方法は、アセンブリ機能を受信する（ステップ５０３）ことと、データシーケンスを含む第１のファイルを受信する（ステップ３０５）ことと、該第１のファイルを表示することと、該第１のファイルを格納する（ステップ３０８）ことと、データシーケンスと、第１のファイルのシーケンスの位置および長さの表示とを含む第３のファイルを受信する（ステップ３２３）ことと、第２のファイルからのデータシーケンスと、第３のファイルによって示される第１のファイルのシーケンスとを含む第２のファイルを作成するために、Ｊａｖａ（登録商標）ｓｃｒｉｐｔ機能を実行する（ステップ３２５）ことと、該第２のファイルを表示する（ステップ３２７）こととを包含する。
【００６２】
引き続き図５を参照し、より詳細に説明すると、ネットワークアプライアンス２０９は、アセンブリ機能を伝送してもよい。該アセンブリ機能は、第２のファイルからのデータシーケンスと、第１のファイルおよび第２のファイルの両方に存在する該データシーケンスの位置および長さの表示とを含むファイルを使用して、第２のファイルをアセンブリするための任意のコンピュータ読み込み可能なプログラム手段を備えてもよい。該アセンブリ機能は、任意のプログラミング言語、あるいはＪａｖａ（登録商標）ｓｃｒｉｐｔまたはＪａｖａ（登録商標）を含むスクリプト言語を含んでもよい。いくつかの実施形態において、アセンブリ機能は、本明細書に記載されたその他のネットワークアプライアンス機能のいずれかによって伝送してもよい。一実施形態において、アセンブリ機能は、その他のクライアント側の加速機能性を提供するプログラムに含めてもよい。
【００６３】
図示された実施形態において、ネットワークアプライアンス２０９がアセンブリ機能を伝送（ステップ５０１）後、クライアント２１３は、アセンブリ機能を受信する（ステップ５０３）。クライアントは、または本明細書に記載されたネットワーク、プロトコル、またはコンピュータデバイスのいずれかを介して、該アセンブリ機能を受信してもよい。いくつかの実施形態において、クライアント２１３は、ネットワークアプライアンス２０９からアセンブリ機能を受信する。一実施形態において、アセンブリ機能は、クライアント側の加速プログラムの一部として含めてもよい。別の実施形態において、アセンブリ機能は、ディスクまたはその他のポータブルストレージデバイスを含む、伝送ソフトウェアの任意の手段によって、クライアント２１３上にインストールしてもよい。
【００６４】
図示された実施形態において、アセンブリ機能を受信（ステップ５０３）後、クライアント２１３は、データシーケンスを含む第１のファイルを受信する。図示された実施形態において、クライアント２１３は、ネットワークアプライアンス２０９から第１のファイルを受信する。別の実施形態において、クライアント２１３は、任意のコンピュータデバイスからの第１のファイルを受信してもよい。該ファイルは、本明細書に記載されている任意のファイル種類またはプロトコルを含んでもよい。
【００６５】
クライアント２１３がデータシーケンスを含む第１のファイルを受信（ステップ３０５）後、クライアント２１３は、該第１のファイルを表示してもよい（ステップ３０７）。このファイルは、所与のファイルに適した任意の方法で表示してもよい。いくつかの実施形態において、ファイルは、ウェブブラウザで表示してもよい。別の実施形態において、ファイルは、ワードプロセッサまたはスプレッドシート等のビジネスアプリケーションで表示してもよい。さらに別の実施形態において、ファイルは、スタンドアロンのアプリケーションを備え、そのようなものとして表示してもよい。いくつかの実施形態において、ファイルは、仮想的なコンピューティング環境で実行するアプリケーションに対応してもよい。一実施形態において、ファイルは、リモートで実行するアプリケーションに対応してもよい。別の実施形態において、ファイルは、ストリーミングアプリケーションに対応してもよい。
【００６６】
クライアント２１３が該第１のファイルを表示（ステップ３０７）後、クライアント２１３は、該第１のファイルを格納してもよい（ステップ３０８）。クライアント２１３は、キャッシュ、ディスク、フラッシュメモリ、またはＲＡＭにおける格納を含む、任意のストレージエレメントにおいて第１のファイルを格納してもよい。いくつかの実施形態において、クライアント２１３は、格納のためにファイルを圧縮してもよい。別の実施形態において、クライアント２１３は、ファイルの一部分のみを格納してもよい。いくつかの実施形態において、クライアント２１３は、該第１のファイルのディスプレイ前またはディスプレイ中（ステップ３０７）に該第１のファイルを格納してもよい（ステップ３０８）。
【００６７】
クライアント２１３が該第１のファイルを格納（ステップ３０８）後、クライアント２１３は、第３のファイルを受信してもよい（ステップ３２３）。図示された実施形態において、クライアント２１３は、ネットワークアプライアンス２０９から第３のファイルを受信する。別の実施形態において、クライアント２１３は、任意のコンピュータデバイスから第３のファイルを受信してもよい。該ファイルは、任意のファイル種類または本明細書に記載されているプロトコルを含んでもよい。いくつかの実施形態において、ファイルは、ＡＳＣＩＩ文字を含んでもよい。別の実施形態において、ファイルは、バイナリデータを含んでもよい。
【００６８】
クライアント２１３が該第３のファイルを受信（ステップ３２３）後、クライアントは、第２のファイルをアセンブルするためにＪａｖａ（登録商標）ｓｃｒｉｐｔ機能を実行してもよい（ステップ３２５）。いくつかの実施形態において、Ｊａｖａ（登録商標）ｓｃｒｉｐｔ機能は、該第３のファイルに含めてもよい。別の実施形態において、Ｊａｖａ（登録商標）ｓｃｒｉｐｔ機能は、クライアント２１３上に既に格納していてもよい。いくつかの実施形態において、Ｊａｖａ（登録商標）ｓｃｒｉｐｔ機能は、クライアント側の加速プログラム内において提供されてもよい。いくつかの実施形態において、第３のファイルは、クライアント２１３がＪａｖａ（登録商標）ｓｃｒｉｐｔ機能をダウンロードできる位置へのリンクを含んでもよい。
【００６９】
Ｊａｖａ（登録商標）ｓｃｒｉｐｔ機能は、任意の技術、または該第２のファイルをアセンブルするために本明細書に記載された任意の技術の逆を実行してもよい。いくつかの実施形態において、Ｊａｖａ（登録商標）ｓｃｒｉｐｔ機能は、ステップ５０３で受け取ったアセンブリ機能を備えてもよい。別の実施形態において、Ｊａｖａ（登録商標）ｓｃｒｉｐｔ機能は、該アセンブリ機能への参照を含んでもよい。さらに別の実施形態において、該Ｊａｖａ（登録商標）ｓｃｒｉｐｔ機能は、該アセンブリ機能のダウンロードのための手段を備えてもよい。
【００７０】
該第２のファイルをアセンブルするためにＪａｖａ（登録商標）ｓｃｒｉｐｔ機能を実行（ステップ３２５）後、クライアントは、該第２のファイルを表示してもよい（ステップ３２７）。ファイルは、ファイルを表示するために本明細書に記載された方法のいずれかによって表示してもよい。
【００７１】
次に図６を参照すると、以前に格納された第１のファイルからの第２のファイル、ならびに、第２のファイルからのデータシーケンスと、第１のファイルおよび第２のファイルの両方に存在するデータシーケンスの位置および長さの表示とを含む第３のファイルをアセンブルする方法の一実施形態が示されている。概観的に、該方法は、第３のファイルからの組のデータを読み込む（ステップ６０１）ことと、該組のデータが、第１および第２のファイルの両方に存在する該データシーケンスの位置および長さに対応するかどうか判断する（ステップ６０３）こととを包含する。この方法は次に、該第１のファイルの指定された位置における指定されたバイト長を読み込む（ステップ６０５）ことと、第２のファイルに該バイトを追加する（ステップ６０７）ことと、第１のファイルから読み込まれたバイトの最後のバイトに１つ加えたバイトの位置に参照ポインタをインクリメントする（ステップ６０９）ことと、該第３のファイルから次の組のデータに移動する（ステップ６１３）こととを含んでもよい。一実施形態において、該方法は、クライアント２１３によって実行してもよい。別の実施形態において、該方法は、図５に記載されているように、アセンブリ機能によって実行してもよい。
【００７２】
引き続き図６を参照して、より詳細に説明すると、クライアント２１３は、第１のファイルの始まりに参照ポインタを設定してもよい。これは、本明細書に記載された方法のいずれかによって実行してもよい。
【００７３】
参照ポインタを設定（ステップ６０１）後、クライアント２１３は、第３のファイルからの組のデータを読み込んでもよい（ステップ６０２）。該組のデータは、任意の数のビットまたは該第３のファイルのバイトを含んでもよい。一実施形態において、該組のデータは、次に、メモリエレメントまたはキャッシュに格納してもよい。
【００７４】
該組のデータを読み込み（ステップ６０２）後、クライアント２１３は、該組のデータが、第１のファイルのシーケンスの長さおよび位置と対応するかどうかを判断してもよい。一実施形態において、クライアントは、該組のデータが特殊文字またはビットシーケンスを含むかどうか判断してもよい。
【００７５】
該組のデータが第１のファイルのシーケンスの長さおよび位置に対応しない場合、クライアント２１３は、該組のデータを第２のファイルに追加してもよい（ステップ６１１）。該追加は、第２のファイルの最後への該組のデータの追加を含んでもよい。クライアント２１３は次に、第３のファイルから次の組のデータへ移動してもよい（ステップ６１３）。
【００７６】
該データが第１のファイルのシーケンスの長さおよび位置に対応する場合、クライアント２１３は次に、第１のファイルの指定された位置に指定された長さのバイトを読み込んでもよい（ステップ６０５）。クライアントは、本明細書に記載された長さおよび位置の表示のいずれかを認識することによって、指定された長さおよび位置を判断してもよい。一実施形態において、クライアントは、次に、メモリエレメントまたはキャッシュに該指定されたバイトを格納してもよい。
【００７７】
第１のファイルの指定された位置に指定された長さのバイトを読み込んだ後（ステップ６０５）、クライアント２１３は、次に、該バイトを第２のファイルに追加してもよい（ステップ６０７）。該追加は、第２のファイルの最後への該バイトの追加を含んでもよい。
【００７８】
クライアント２１３は次に、該第１のファイルから読み込んだバイトの最後のバイトに１つ加えたバイトの位置に参照ポインタをインクリメントしてもよい（ステップ６０９）。これは、本明細書に記載された方法のいずれかによって実行してもよい。クライアント２１３は、次に、該第３のファイルから次の組のデータに移動してもよい（ステップ６１３）。
【００７９】
次に図７を参照すると、ファイル伝送方法を判断するための方法の一実施形態を示す。以下の実施形態ではネットワークアプライアンス２０９によって実行される方法を記載しているが、該方法は、マシンのいずれかまたは上述したマシンの組み合わせによって実行してもよい。概観的に、該方法は、クライアント２１３からのリソースのリクエストを受信する（ステップ７０１）ことと、該クライアントの機能のためのリクエストを送信する（ステップ７０３）ことと、該クライアントの機能を含む情報を受信する（ステップ７０５）ことと、ファイル伝送方法を判断する（ステップ（７０７）こととを包含する。
【００８０】
引き続き図７を参照し、より詳細に説明すると、ネットワークアプライアンス２０９は、クライアントからのリクエストを受信する（ステップ７０１）。一実施形態において、クライアントからのリクエストの受信（ステップ７０１）は、クライアントからの直接のリクエストの受信を含む。別の実施形態において、クライアント２１３からのリクエストは、上述した、ネットワーク、接続、および機器のいずれかから受信してもよい。該リクエストは、上述したプロトコルのいずれかを含んでもよい。いくつかの実施形態において、リクエストは、クライアント２１３から伝送されるのと全く同じリクエストを含んでもよい。別の実施形態において、リクエストは、クライアント２１３からの元のリクエストの修正を含んでもよい。該修正は、上述したネットワークアプライアンスサービスのいずれかを提供する間の修正、ならびに、リクエストのコンテンツ、フォーマット、プロトコル、アドレス指定、ヘッダ、またはその他の部分、クライアント２１３からのリクエスト、または新規リクエストに対する任意のその他の修正を含んでもよい。リクエストは、クライアント２１３によって直接リクエストされるリソースを含んでもよく、クライアント２１３の任意のサービスの実行中においてリクエストされるリソースを含んでもよい。
【００８１】
クライアントからリクエストを受信（ステップ７０１）後、ネットワークアプライアンス２０９は、該クライアントの機能のリクエストを送信する（ステップ７０３）。一実施形態において、該リクエストは、クライアント２１３に送信してもよい。別の実施形態において、リクエストは、その内容が参照によって本明細書中に明示的に組み込まれている、米国特許出願第１０／９５６８３２号「Ａ  ＭＥＴＨＯＤ  ＡＮＤ  ＡＰＰＡＲＡＴＵＳ  ＦＯＲ  ＡＳＳＩＧＮＩＮＧ  ＡＣＣＥＳＳ  ＣＯＮＴＲＯＬ  ＬＥＶＥＬＳ  ＩＮ  ＰＲＯＶＩＤＩＮＧ  ＡＣＣＥＳＳ  ＴＯ  ＮＥＴＷＯＲＫＥＤ  ＣＯＮＴＥＮＴ  ＦＩＬＥＳ」に記載されているように、収集エージェント（ｃｏｌｌｅｃｔｉｏｎ  ａｇｅｎｔ）に送信してもよい。該収集エージェントは、リクエストを送信するネットワークアプライアンスと同じ物理的なマシン上に常駐してもよく、または異なる物理的なマシン上に常駐してもよい。該リクエストは、さらに、ファイル、キャッシュ、データベース、サーバ、実行中のアプリケーション、または任意のその他の、クライアント２１３に関する情報源に送信してもよい。
【００８２】
クライアントの機能のリクエストを送信（ステップ７０３）後、ネットワークアプライアンス２０９は、該クライアント機能を含む情報を受信する（ステップ７０５）。該情報は、クライアント２１３、収集エージェント、ファイル、キャッシュ、データベース、サーバ、実行中のアプリケーション、または任意のその他の、クライアント２１３に関する情報源から受信してもよい。該情報は、限定としてではなく、クライアントノード２１３のマシンＩＤ、オペレーティングシステムの種類、オペレーティングシステムへのパッチの有無、インストールしたネットワークカードのＭＡＣアドレス、クライアントデバイス上のデジタルウォーターマーク、Ａｃｔｉｖｅ  Ｄｉｒｅｃｔｏｒｙにおけるメンバーシップ、ウィルススキャナの有無、パーソナルファイアウォールの有無、ＨＴＴＰヘッダ、ブラウザの種類、デバイスの種類、ネットワーク接続情報、認可証明書（ａｕｔｈｏｒｉｚａｔｉｏｎ  ｃｒｅｄｅｎｔｉａｌ）、および上述したその他の機能または設定のいずれかを備えてもよい。いくつかの実施形態において、ネットワークアプライアンスは、後で取得するために、該情報を格納またはキャッシュしてもよい。
【００８３】
該クライアント機能を含む情報の受信（ステップ７０５）後、ネットワークアプライアンスは、該クライアント２１３に対応するファイル伝送方法を判断してもよい（ステップ７０７）。該判断は、受信した情報のいずれかに基づいて行ってもよい。
【００８４】
いくつかの実施形態において、ネットワークアプライアンス２０９は、図３に記載されている以前に格納されたファイルへの効率的な更新を作成するための方法によって、ファイルを伝送するために、ステップ７０５で受信した情報に応答して、判断してもよい。一実施形態において、該判断は、クライアントの２１３メモリサイズ、接続速度、接続帯域幅、プロセッサ速度、または格納したファイルが以前に存在したかどうかに対応する情報に応答して行ってもよい。
【００８５】
いくつかの実施形態において、ネットワークアプライアンス２０９は、クライアント２１３へアセンブリ機能を伝送するために、ステップ７０５で受信された情報に応答して、判断してもよい。例えば、クライアント２１３がアセンブリ機能を有していないという情報をネットワークアプライアンス２０９が受信する場合、およびクライアントがアセンブリ機能を実行するための機能を有すると情報が示す場合、ネットワークアプライアンスはアセンブリ機能をクライアント２１３に伝送してもよい。いくつかの実施形態において、該アセンブリ機能は、リクエストされたコンテンツファイル、またはネットワークアプライアンス２０９の機能によって伝送されたその他のファイルを含む、任意のその他のファイルと共に伝送してもよい。いくつかの実施形態において、ネットワークアプライアンスは、複数のアセンブリ機能を有してもよい。例えば、ネットワークアプライアンス２０９は、異なるコンピューティング環境、オペレーティングシステム、およびハードウェア構成のために最適化した多数のアセンブリ機能を有してもよい。ネットワークアプライアンスは次に、ステップ７０５で受信された情報に応答して、クライアント２１３にどのアセンブリ機能を伝送するか判断してもよい。
【００８６】
本発明は、特定の好適な実施形態を参照して、特に示され、記載されているが、添付の特許請求の範囲に定義されているように、本発明の精神および範囲から逸脱しない限り、形式および詳細における種々の変更を行ってもよいことが、当業者には理解されるであろう。
【図１Ａ】
2009543227.tif 000003
【図１Ｂ】
2009543227.tif 000004
【図２】
2009543227.tif 000005
【図３】
2009543227.tif 000006
【図４】
2009543227.tif 000007
【図５】
2009543227.tif 000008
【図６】
2009543227.tif 000009
【図７】
2009543227.tif 000010
【国際調査報告】
2009543227.tif 000011
2009543227.tif 000012