(57)【要約】【課題】データファイルに対する、複数の範囲のデータの送信要求又は受信要求を並列に実行する場合に、データファイル内のデータ取得又は送出の効率を向上させる。【解決手段】  一実施形態にかかる通信装置は、ネットワークを介して第１の装置と通信する装置であって、指定部と、要求送信部と、を備える。指定部は、前記第１の装置が保持する第１のデータファイルの始点位置である第１の位置から終点位置である第２の位置に向かってデータを送信することを要求する第１のデータ送信要求を指定するとともに、前記第１のデータファイル内のうち前記第２の位置から前記１の位置に向かってデータを送信することを要求する第２のデータ送信要求を指定する。要求送信部は、前記第１の送信要求および前記第２の送信要求を前記第１の装置に対して送信する。【選択図】図１
2015172812.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介して第１の装置と通信する装置であって、
前記第１の装置が保持する第１のデータファイルの始点位置である第１の位置から終点位置である第２の位置に向かってデータを送信することを要求する第１のデータ送信要求を指定するとともに、前記第１のデータファイル内のうち前記第２の位置から前記１の位置に向かってデータを送信することを要求する第２のデータ送信要求を指定する指定部と、
前記第１の送信要求および前記第２の送信要求を前記第１の装置に対して送信する要求送信部と、
を備える通信装置。
【請求項２】
更に、前記第１のデータ送信要求に対する応答として前記第１のデータを受信するとともに、前記第２のデータ送信要求に対する応答として前記第２のデータを受信する受信部を備え、
前記受信部が、前記第１のデータを前記第１の位置から第３の位置まで受信し、かつ前記第２のデータを前記第２の位置から前記第３の位置まで受信した場合に、前記受信部の前記第１のデータ及び前記第２のデータの受信処理を停止させる制御部を備える
請求項１記載の通信装置。
【請求項３】
更に、前記第１のデータ送信要求に対する応答として前記第１のデータを受信するとともに、前記第２のデータ送信要求に対する応答として前記第２のデータを受信する受信部を備え、
前記指定部は、更に、前記第１のデータファイルの前記第１の位置と前記第２の位置との間の位置にある第３の位置から前記第２の位置に向かってデータを送信することを要求する第３のデータ送信要求を指定し、
前記要求送信部は、前記受信部が前記第１のデータ及び前記第２のデータの受信を開始した後であって、かつ前記第１のデータまたは前記第２のデータの受信を完了する前の第１の時点に、前記第３のデータ送信要求を送信する請求項１記載の通信装置。
【請求項４】
前記指定部は、前記第１のデータファイルのうち、前記第３の位置から前記第１の位置に向かってデータを送信することを要求する第４のデータ送信要求を指定し、
前記要求送信部は、前記受信部が前記第１のデータ及び前記第２のデータの受信を開始した後であって、かつ前記第１のデータまた前記第２のデータの受信を完了する前の第２の時点に、前記第４のデータ送信要求を送信する請求項３記載の通信装置。
【請求項５】
前記受信部は、更に、前記第３のデータ、及び前記第４のデータを受信し、
前記受信部が、前記第１のデータの前記第１の位置から第４の位置までを受信し、かつ前記第４のデータの前記第３の位置から前記第４の位置まで受信した時点で、前記第１のデータ及び前記第４のデータの受信を停止させ、前記受信部が、前記第２のデータの前記第２の位置から第５の位置まで受信し、かつ前記第３のデータの前記第３の位置から前記第５の位置まで受信した時点で、前記第２のデータ及び前記第３のデータの受信を停止させる制御部を備える
請求項４記載の通信装置。
【請求項６】
前記第３のデータの受信開始前と比べて前記第３のデータの受信開始後の方が、前記受信部が前記第１のデータ又は前記第２のデータを受信する受信速度が遅くなった場合に、前記受信部による前記第３のデータの受信を停止させる制御部を更に備える
請求項３記載の通信装置。
【請求項７】
前記指定部は、前記第３の位置を、前記受信部による前記第１のデータの受信速度と前記第２のデータの受信速度に基づき指定する請求項４記載の通信装置。
【請求項８】
前記指定部は、前記第３の位置を、前記第１の位置と前記第２の位置との真ん中の位置と指定する請求項４記載の通信装置。
【請求項９】
第１のデータファイルと、前記第１のデータファイルを反転させたデータファイルである第２のデータファイルとを保持する第１の装置と、ネットワークを介して通信する装置であって、
前記第１のデータファイルのうち前記第１の始点位置から前記第１の終点位置に向かってデータを送信することを要求する第１のデータ送信要求を指定するとともに、前記第２のデータファイルのうち前記第２の始点位置から前記第２の終点位置に向かってデータを送信することを要求する第２のデータ送信要求を指定する指定部と、
前記第１のデータ送信要求および前記第２のデータ送信要求を前記第１の装置に対して送信する要求送信部と、
を備える通信装置。
【請求項１０】
前記第２のデータファイルは、前記第２の終点位置が、前記第１のデータファイルの前記第１の始点位置に対応し、前記第２の始点位置が、前記１のデータファイルの前記第１の終点位置に対応するデータファイルである
請求項９記載の通信装置
【請求項１１】
更に、前記第１のデータ送信要求に対する応答として前記第１のデータを受信し、前記第２のデータ送信要求に対する応答として前記第２のデータを受信する受信部を備え、
前記受信部が、前記第１のデータファイルの前記第１の始点位置から第１の位置まで受信し、前記第２のデータファイルの前記第２の始点位置から、前記第１のデータファイルの前記第１の位置に対応する位置である第２の位置まで受信した時点で、前記受信部による前記第１のデータ及び前記第２のデータの受信を停止させる制御部を備える
請求項１０記載の通信装置。
【請求項１２】
前記指定部は、更に、前記第１のデータファイルの前記第１の始点位置と前記第１の終点位置との間の位置である第３の位置から前記第１の終点位置に向かってデータを送信することを要求する第３のデータ送信要求を指定し、
前記要求送信部は、前記受信部が前記第１のデータ及び前記第２のデータを受信開始後、前記第１のデータまたは前記第２のデータを受信完了する前の第１の時点に、前記第３のデータ送信要求を送信する
請求項１０記載の通信装置。
【請求項１３】
前記指定部は、更に、前記第２のデータファイルの前記第２の始点位置と前記第２の終点位置との間の位置である第４の位置から前記第２の終点位置に向かってデータを送信することを要求する第４のデータ送信要求を指定し、
前記要求送信部は、前記受信部が前記第１のデータ及び前記第２のデータを受信開始後、前記第１のデータまたは前記第２のデータを受信完了する前の第２の時点に、前記第４のデータ送信要求を送信する
請求項１０記載の通信装置。
【請求項１４】
前記指定部は、前記第３の位置及び前記第４の位置を、前記受信部による前記第１のデータの受信速度と前記第２のデータの受信速度に基づき指定する請求項１３記載の通信装置。
【請求項１５】
前記指定部は、前記第３の位置を、前記第１の始点位置と前記第１の終点位置との真ん中の位置と指定する請求項１２記載の通信装置。
【請求項１６】
ネットワークを介して第１の装置と通信する装置であって、
第１のデータファイルを保持する保持部と、
前記第１のデータファイルの始点位置である第１の位置から終点位置である第２の位置に向かってデータを送信するとともに、前記第１のデータファイル内のうち前記第２の位置から前記１の位置に向かってデータを送信する送信部と、を備える
通信装置。
【請求項１７】
前記第１の装置から前記第１のデータファイル内のデータのうち前記第１の位置から前記第２の位置に向かっての第１のデータ送信要求を受信するとともに、前記第１のデータファイル内のデータのうち前記第２の位置から前記第１の位置に向かっての第２のデータ送信要求を受信する受信部と、
前記送信部は、前記第１のデータ送信要求及び前記第２のデータ送信要求に従って前記第１のデータファイル内のデータを送信する
請求項１６記載の通信装置。
【請求項１８】
前記送信部は、更に、前記第１の装置に対して、前記第１のデータファイル内のデータのうち前記第１の位置から前記第２の位置に向かっての第１のデータ受信要求を送信するとともに、前記第１のデータファイル内のデータのうち前記第２の位置から前記第１の位置に向かっての第２のデータ受信要求を送信する
請求項１６記載の通信装置。
【請求項１９】
第１のデータファイルと、前記第１のデータファイルを反転させたデータファイルである第２のデータファイルとを保持する保持部と、
第１の装置に対して、前記第１のデータファイル内のデータのうち第１の始点位置から第１の終点位置に向かうデータである第１のデータを送信するとともに、前記第２のデータファイル内のデータのうち第２の始点位置から第２の終点位置に向かうデータである第２のデータを送信する送信部と、を有する通信装置。
【請求項２０】
前記第１の装置から前記第１のデータファイル内のデータのうち前記第１の始点位置から前記第１の終点位置に向かっての前記第１のデータの送信要求を受信するとともに、前記第２のデータファイル内のデータのうち前記第２の始点位置から前記第２の終点位置に向かっての前記第２のデータの送信要求である第２の送信要求を受信する受信部と、
前記送信部は、前記第１の送信要求に従って前記第１のデータを送信すると共に、前記第２のデータ送信要求に従って前記第２のデータを送信する
請求項１９記載の通信装置。
【請求項２１】
前記送信部は、更に、前記第１の装置に対して、前記第１のデータファイル内のデータのうち前記第１の始点位置から前記第１の終点位置に向かっての前記第１のデータの受信要求を送信するとともに、前記第２のデータファイル内のデータのうち前記第２の始点位置から前記第２の終点位置に向かっての前記第２のデータの受信要求である第２の受信要求を送信する
請求項１９記載の通信装置。
【請求項２２】
ネットワークを介して第１の装置と通信する装置を制御するプログラムであって、
前記第１の装置が保持する第１のデータファイルの始点位置である第１の位置から終点位置である第２の位置に向かってデータを送信することを要求する第１のデータ送信要求を指定するとともに、前記第１のデータファイル内のうち前記第２の位置から前記１の位置に向かってデータを送信することを要求する第２のデータ送信要求を指定する指定機能と、
前記第１の送信要求および前記第２の送信要求を前記第１の装置に対して送信する要求送信機能と、
を備えるプログラム。
【請求項２３】
第１のデータファイルと、前記第１のデータファイルを反転させたデータファイルである第２のデータファイルとを保持する第１の装置と、ネットワークを介して通信する装置を制御するプログラムであって、
前記第１のデータファイルのうち第１の始点位置から第１の終点位置に向かってデータを送信することを要求する第１のデータ送信要求を指定するとともに、前記第２のデータファイルのうち第２の始点位置から第２の終点位置に向かってデータを送信することを要求する第２のデータ送信要求を指定する指定機能と、
前記第１のデータ送信要求および前記第２のデータ送信要求を前記第１の装置に対して送信する要求送信機能と、
を備えるプログラム。
【請求項２４】
第１のデータファイルと、前記第１のデータファイルを反転させたデータファイルである第２のデータファイルとを保持する保持機能と、
第１の装置から前記第１のデータファイル内のデータのうち第１の始点位置から第１の終点位置に向かっての第１のデータの送信要求を受信するとともに、前記第２のデータファイル内のデータのうち第２の始点位置から第２の終点位置に向かっての第２のデータの送信要求である第２の送信要求を受信する受信機能と、
前記第１の送信要求に従って前記第１のデータを送信すると共に、前記第２のデータ送信要求に従って前記第２のデータを送信する送信機能とを有する
プログラム。
【請求項２５】
ネットワークを介して第１の装置と通信する装置を制御するプログラムであって、
第１のデータファイルを保持する保持機能と、
前記第１のデータファイルの始点位置である第１の位置から終点位置である第２の位置に向かってデータを送信するとともに、前記第１のデータファイル内のうち前記第２の位置から前記１の位置に向かってデータを送信する送信機能と、を備える
プログラム。
【請求項２６】
第１のデータファイルと、前記第１のデータファイルを反転させたデータファイルである第２のデータファイルとを保持する保持機能と、
第１の装置に対して、前記第１のデータファイル内のデータのうち第１の始点位置から第１の終点位置に向かうデータである第１のデータを送信するとともに、前記第２のデータファイル内のデータのうち第２の始点位置から第２の終点位置に向かうデータである第２のデータを送信する送信機能と、を有するプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、通信装置、及びプログラムに関する。
【背景技術】
【０００２】
クライアント端末とサーバとの間でのデータファイルの送受信を行うためのプロトコルとしてHTTP（Hyper  Text  Transfer  Protocol）プロトコルがある。クライアント端末が、サーバからデータファイルを取得する場合、クライアント端末はサーバに対して、例えばGETメソッドを用いたリクエスト（以下では、データ送信要求と称する。）を通知することで、所望のデータファイルを取得できる。一方、クライアント端末が、サーバへデータファイルを送出する場合、クライアント端末はサーバに対して、例えばＰＵＴメソッドやPOSTメソッドを用いたリクエスト（以下では、データ受信要求と称する。）を通知することで、所望の宛先のデータファイルとしてデータを送出することができる。データ送信要求やデータ受信要求では、所望のデータファイルをＵ Ｒ Ｌ （ U n i f o r m  R e s o u r c e  L o c a t o r）やＵ Ｒ Ｌの一部分で指定する。
【０００３】
また、HTTPプロトコルにおいては、クライアント端末とサーバとの間でのデータファイルの一部分のデータの送受信を行うための部分的データ送受信要求が可能である。例えば、クライアント端末がサーバからデータファイルの一部分のデータを取得したい場合、クライアント端末はサーバに対して部分的データ送信要求を通知する。例えばGETメッソッドを用いたリクエストにおいて、所望のデータファイルをURLで指定するとともに、Rangeヘッダで、データファイル内の一部分のデータの範囲を指定して通知する。
【０００４】
部分的データ送信要求の応用例として、データファイルの複数の異なる部分のデータを同時に取得するために、部分的データ送信要求を複数同時に行う手法がある。クライアント端末は、複数の部分的データ送信要求をサーバに対して同時に送信することで、各部分データを並列に取得する。この手法を用いることで、データファイル全体のデータを取得するための時間を短縮することができる。
【０００５】
しかしながら、従来の手法において、たとえば、１つのデータファイルにつき２つの部分的データ送信要求によりデータを取得する場合に、２つの部分的データ送信要求ごとに、データの取得に要する時間が大きく異なるケースがあった。たとえば、動画データ等大きなデータファイルを取得したい場合に、一方の部分的データ送信要求の部分データ取得後、他方の部分的データ送信要求の部分データの取得完了を長時間待つケースが生じる。このような問題は、データファイルの複数の部分のデータを同時に送出する場合にも、同様に生じうる。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】Ｆａｓｔ Ｄｏｗｎｌｏａｄｉｎｇ ｗｉｔｈ ｐａｒａｌｌｅｌ Ｒｅｑｕｅｓｔｓ ｕｓｉｎｇ ＡＳＰ．ＮＥＴ Ｗｅｂ ＡＰＩ ｜ ＴｅｃｈＢｒｉｊ，ｈｔｔｐ：／／ｔｅｃｈｂｒｉｊ．ｃｏｍ／ｄｏｗｎｌｏａｄ−ｐａｒａｌｌｅｌ−ｒｅｑｕｅｓｔｓ−ｒａｎｇｅ−ａｓｐ−ｎｅｔ−ｗｅｂａｐｉ
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明の一側面は、データファイルに対して、複数のデータ送信要求又は受信要求を並列に実行する場合に、データファイル内のデータ取得又は送出の効率を向上させることを目的とする。
【課題を解決するための手段】
【０００８】
本発明の実施形態にかかる通信装置は、ネットワークを介して第１の装置と通信する装置であって、指定部と、要求送信部と、を備える。指定部は、前記第１の装置が保持する第１のデータファイルの始点位置である第１の位置から終点位置である第２の位置に向かってデータを送信することを要求する第１のデータ送信要求を指定するとともに、前記第１のデータファイル内のうち前記第２の位置から前記１の位置に向かってデータを送信することを要求する第２のデータ送信要求を指定する。要求送信部は、前記第１の送信要求および前記第２の送信要求を前記第１の装置に対して送信する。
【図面の簡単な説明】
【０００９】
【図１】本発明の第1の実施形態にかかるシステムを示すブロック図。
【図２】図１の通信装置１１０の動作を示すフローチャート。
【図３】第１のデータファイルの第１のデータの送信要求と第２のデータの送信要求を示す図。
【図４】第１の実施形態の変形例１における送信要求の第１の例を示す図。
【図５】第１の実施形態の変形例１における送信要求の第２の例を示す図。
【図６】本発明の第1の実施形態の変形例２にかかるシステムを示すブロック図。
【図７】第１の実施形態の変形例２における送信要求を示す図。
【図８】第１の実施形態の変形例３における送信要求を示す図。
【図９】第１の実施形態の変形例４におけるシステムを示すブロック図。
【図１０】本発明の第２の実施形態にかかるシステムを示すブロック図。
【図１１】第１のデータファイルの第１のデータの受信要求と第２のデータの受信要求を示す図。
【図１２】第２の実施形態の変形例１における受信要求の第１の例を示す図。
【図１３】第２の実施形態の変形例１における受信要求の第２の例を示す図。
【図１４】本発明の第２の実施形態の変形例２にかかるシステムを示すブロック図。
【図１５】第２の実施形態の変形例２における受信要求を示す図。
【図１６】第２の実施形態の変形例３における受信要求を示す図。
【図１７】本発明の第２の実施形態の変形例４にかかるシステムを示すブロック図。
【図１８】本発明の第３の実施形態にかかるシステムを示すブロック図。
【図１９】図１８の通信装置３１０の動作を示すフローチャート。
【図２０】通信装置３１０のデータ送信要求のデータ範囲を示す図。
【図２１】通信装置３１０のデータ送信要求のデータ範囲を示す第２の例の図。
【図２２】第３の実施形態の変形例１の通信装置３１０Ａが、第１の時点で要求するデータ送信要求のデータ範囲を示す図。
【図２３】通信装置３１０Ａが、第２の時点で、要求するデータ送信要求のデータ範囲を示す図。
【図２４】第３の実施形態の変形例２の通信装置３１０Ｂが、第１の時点で要求するデータ送信要求のデータ範囲を示す図。
【図２５】通信装置３１０Ｂが、第２の時点で、要求するデータ送信要求のデータ範囲を示す図。
【図２６】愛３の実施形態の変形例３の通信装置３１０Ｃが、第１の時点で要求するデータ送信要求のデータ範囲を示す図。
【図２７】通信装置３１０Ｃが、第２の時点で、要求するデータ送信要求のデータ範囲を示す図。
【図２８】第３の実施形態の変形例４の通信装置３１０Ｄが、第１の時点で要求するデータ送信要求のデータ範囲を示す図。
【図２９】通信装置３１０Ｄが、第２の時点で、要求するデータ送信要求のデータ範囲を示す図。
【発明を実施するための形態】
【００１０】
以下、本発明の実施の形態について、図面を参照しながら説明する。尚、各図において同一箇所については同一の符号を付すとともに、重複した説明は省略する。
【００１１】
＜第１の実施形態＞
図１は、第1の実施形態にかかるシステムを示すブロック図である。図１のシステムは、通信装置１１０とサーバ１２０とネットワーク１３０とから構成される。通信装置１１０は、サーバ１２０とネットワーク１３０を介して通信する。通信装置１１０とサーバ１２０はＨＴＴＰプロトコルでデータをやりとりする。
【００１２】
通信装置１１０は、例えば、ＨＴＴＰプロトコルにおけるデータクライアントプログラムが載った装置である。通信装置１１０は、例えば、ＰＣ、家電、又はネットワークカメラ等である。通信装置１１０は、データセンターであってもよい。
【００１３】
サーバ１２０は、例えば、ＨＴＴＰプロトコルにおけるサーバプログラムが載った装置である。サーバ１２０は、例えば、データセンターである。サーバ１２０は、ＰＣ、家電、又はネットワークカメラ等であってもよい（この場合、通信装置１１０がデータセンターである）。
【００１４】
通信装置１１０は、指定部１１１と、要求送信部１１２と、データ受信部１１３と、書き込み制御部１１４と、記憶部１１５と、を備える。
【００１５】
指定部１１１は、サーバが保持する第１のデータファイルの始点位置である第１の位置から終点位置である第２の位置に向かってデータを送信することを要求する第１のデータ送信要求を指定する。指定部１１１は、第１のデータファイル内のうち第２の位置（終点位置）から第１１の位置（始点位置）に向かってデータを送信することを要求する第２のデータ送信要求を指定する。
【００１６】
指定部１１１は、第１のデータ送信要求を、ＨＴＴＰ（Hyper  Text  Transfer  Protocol）プロトコルのＧＥＴリクエストで指定する。ＧＥＴリクエストでは、どのデータファイルを取得するかＵＲＬで指定する。また、指定部１１１は、第２のデータ送信要求を、ＨＴＴＰのＧＥＴリクエストで、どのデータファイルを取得するかＵＲＬで指定する。また、第２のデータ送信要求を、Ｒａｎｇｅヘッダによる取得範囲の指定方法を拡張して、取得方法を指定する。図３を用いて説明する。指定部１１１は、Ｒａｎｇｅヘッダで、９９９バイト目（データファイルの終点位置）から０バイト目（データファイルの始点位置）までを逆方向（９９９バイトから０バイトに向かって）取得するように指定している。この指定方法は、現時点のＨＴＴＰプロトコルの標準仕様においては想定されていないものである。現時点でのＨＴＴＰプロトコルの標準仕様においては、Ｒａｎｇｅヘッダにおける指定方法は、ｂｙｔｅｓとしてデータファイルの始点位置から終点位置に向かって指定している。一方、本例では、Ｒａｎｇｅヘッダにおいて、ｒｂｙｔｅｓとして、データファイルのデータを逆方向で取得するように指定している。なお、逆方向に取得することを指定する方法はこの方法に限られない。例えば、ｒｂｙｔｅｓ以外の別の新たな単語を定義してもよいし、新たなリクエストコマンドやオプションヘッダを定義して識別できるようにしてもよい。また、ｂｙｔｅｓとして指定する部分はそのままとして，指定範囲の数値や記号などの記述方法を変更してもよい。たとえば Ｒａｎｇｅ： ｂｙｔｅｓ −９９９−０ などと指定しても良い。
【００１７】
要求送信部１１２は、第１のデータ送信要求および第２のデータ送信要求をサーバ１２０に対して送信する。同時に送信しても良いし、異なるタイミングで送信しても良い。たとえば、ＨＴＴＰ（Hyper  Text  Transfer  Protocol）プロトコルのＧＥＴリクエストで送信する。
【００１８】
データ受信部１１３は、サーバ１２０から、第１のデータ送信要求の応答である第１のデータを受信する。データ受信部１１３は、サーバ１２０から、第２のデータ送信要求の応答である第２のデータを受信する。
【００１９】
書き込み制御部１１４は、  第１のデータと第２のデータとをデータ受信部１１３で受信すると受信したデータを反転および連結して第１のデータファイルを再構成する。データファイルの再構成は，データ受信部１１３が受信しながら反転および連結してもよいし、受信後に反転および連結してもよい。書き込み制御部１１４は、  データ受信部１１３が、第１のデータを第１の位置（始点位置）から第３の位置まで受信し、かつ第２のデータを第２の位置（終点位置）から第３の位置まで受信した場合に、データ受信部１１３の第１のデータ及び第２のデータの受信処理を停止させても良い。例えば、第１のデータと第２の受信データの範囲が重複した時点でデータ受信部１１３の受信を停止させても良い。例えば、図３の例では、第１のデータを７００バイトまで受信し、第２のデータも７００バイトまで受信に達した時点で、書き込み制御部１１４は、第１のデータと第２のデータの受信を停止させても良い。尚、書き込み制御部１１４は、第２のデータを７００バイトまで受信をする必要はなく、７０１バイトまで受信すれば、第１のデータと第２のデータの受信を停止させて良い。つまり、書き込み制御部１１４は、第１のデータと第２のデータとで、第１のデータファイル全体を取得できればよく、第１のデータと第２のデータとで重複データを取得する必要はない。尚、書き込み制御部１１４は、第１のデータファイル全体を取得したことを、第１のデータと第２のデータのトータル料が９９９バイト以上になったことに基づき検知してもよい。書き込み制御部１１４は、９９９バイト以上受信したことに基づき、データ受信部１１３の受信を停止させてよい。
【００２０】
記憶部１１５は、第１データファイルを記憶する。なお、記憶部１１５は、ストレージであっても、メモリ等のバッファであってもよい。なお、書き込み制御部１１４は、第１のデータと第２のデータをそのまま記憶部１１５に記憶し、第１のデータファイルの再構成は、記憶部１１５に記憶後、行ってもよい。
【００２１】
サーバ１２０は、要求受信部１２１と、データ送信部１２２と、読み込み制御部１２３と、記憶部１２４とを備える。
【００２２】
要求受信部１２１は、通信装置１１０からの第１データファイルの中のデータの送信要求を受け取ると、データ送信部１２２に、送信要求に係るデータの送信を指示する。
【００２３】
データ送信部１２２は、要求受信部１２１に指示されたデータを、読み込み制御部１２３を介して記憶部１２４から読みだして送信する。
【００２４】
読み込み制御部１２３は、記憶部１２４から、要求受信部１２１が受信した指示にしたがって、第１データファイルを読み出す。
【００２５】
記憶部１２４は、第１データファイルを記憶する。なお、記憶部１２４は、ストレージであっても、メモリ等のバッファであってもよい。
【００２６】
次に、図２及び図３を用いて、通信装置１１０の動作の具体例を説明する。図２は、通信装置１１０の動作を示すフローチャートである。図３は、第１のデータファイルの第１のデータと第２のデータの取得方法を示す図である。
【００２７】
まず、指定部１１１は、第１のデータ送信要求及び第２の送信要求を指定する（S１０１）。第１の送信要求として、ＨＴＴＰ  ＧＥＴ  リクエストで、図３のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定する。また、第２の送信要求として、第２の送信要求として、ＨＴＴＰ  ＧＥＴ  リクエストで、図３のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定する。また、Ｒａｎｇｅヘッダで、データをデータファイルの終点から始点に向けて送信する要求とを指定する。具体的には、Rａｎｇｅヘッダで、９９９バイト目（データファイルの終点位置）から０バイト目（データファイルの始点位置）までを逆方向に取得するように指定している。図３の例では、Ｒａｎｇｅ:rbyetes=990-0  という表現で指定している。
【００２８】
次に、要求送信部１１２は、指定部１１１が指定した第１のデータ送信要求と第２のデータ送信要求を送信する（S１０２）。
【００２９】
サーバ１２０は、第１データ送信要求を受け取ると、指定されたデータファイルを始点位置（０バイト）から終点位置（９９９バイト）に向けて送信する。また、サーバ１２０は、サーバ１２０は、第２データ送信要求を受け取ると、指定されたデータファイルを終点位置（９９９バイト）から始点位置（０バイト）に向けて送信する。
【００３０】
通信装置１１０のデータ受信部１１３は、第１のデータを順次受信するとともに、第２のデータを順次受信する（S１１３）。
【００３１】
書き込み制御部１１４は、データ受信部１３が、第１の送信要求に対するデータと第２の送信要求に対するデータが重なる位置に達するまで受信したことを検知する。書き込み制御部１１４は、その後、データ受信部１１３の第１のデータ及び第２のデータの受信を停止させる。例えば、第１の送信要求に対するデータを７００バイトまで受信し、第２の送信要求に対するデータを７００バイトまで受信した時点でデータの受信を停止させる。尚、書き込み制御部１１４は、第２のデータを７００バイトまで受信をする必要はなく、７０１バイトまで受信すれば、第１のデータと第２のデータの受信を停止させて良い。つまり、書き込み制御部１１４は、第１のデータと第２のデータとで、第１のデータファイル全体を取得できればよく、第１のデータと第２のデータとで重複データを取得する必要はない。
【００３２】
書き込み部１１４は、第１のデータ送信要求、第２のデータ送信要求各々に対する応答をデータ受信部１１３が受信すると、両データを結合し第１のデータファイルを再現する。書き込み制御部１１４は、再現した第１のデータファイルを記憶部１１５に記憶する。
【００３３】
尚、第１の実施形態では、書き込み制御部１１４は、第１のファイルすべてを受信したことを検知した場合に、データの受信を停止させていたが、受信を停止させなくてもよい。また、第１のファイルすべてを受信したことを検知した場合に、サーバ１２０にデータの送信を停止させてもよい。
【００３４】
また、第１の実施形態では、第１のファイル全体に対して２つのデータ送信要求を出したが、第１のファイル全体に出さなくてもよい。例えば、第１のファイルのうち一部のデータに対して、２つのデータ送信要求を出してもよい。例えば、第１のファイルをＮ個のデータにわけて、Ｎ個のデータそれぞれに対して、始点から終点に向けた第１のデータ送信要求と、終点から視点に向けた第２のデータ送信要求を出してもよい。このような場合、データ送信要求は、２Ｎ個出すことになる。
【００３５】
尚、通信装置１１０は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、指定部１１１、要求送信部１１２、データ受信部１１３、書き込み制御部１１４、記憶部１１５は、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、通信装置１１０は、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、ＣＤ−ＲＯＭなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。また、記憶部１１５は、上記のコンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒなどの記憶媒体などを適宜利用して実現することができる。
【００３６】
第１の実施形態の通信装置１１０によれば、サーバ１２０に対して、データファイルの始点位置から終点位置に向けてデータを送信することを要求するとともに、終点位置から始点位置までデータを送信することを要求することで、複数のデータを並列に受信する場合に、データファイル内のデータを効率的に取得することができる。第１のデータ送信要求に対するデータの受信スピードと第２のデータ送信要求に対するデータの受信スピードが異なっても、第１のデータ送信要求と第２のデータ送信要求は逆方向に向かってデータを取得し、データ範囲はある時点で重なることになり、効率的にデータファイルのデータを取得することができる。
【００３７】
＜第１の実施形態の変形例１＞
次に、第１の実施形態の変形例１を説明する。なお、第１の実施形態の変形例１のシステム構成は図１と同様である（図示は省略するが、符号は、図１の各要素の符号にＡを追加したものである）。
【００３８】
第１の実施形態の変形例１に係る通信装置１１０Aは、データファイルの始点位置から終点位置に向かう第１のデータ送信要求と、終点位置から始点位置に向かう第２のデータ送信要求を出した後に、追加でデータ送信要求を出す点が、第１の実施形態に係る通信装置１１０と異なる。
【００３９】
通信装置１１０Aは、指定部１１１A、要求送信部１１２A、データ受信部１１３A、書き込み制御部１１４Aの機能が第１の実施形態に係る通信装置１１０と異なる。
【００４０】
指定部１１１Aは、第１の実施形態の指定部１１１の機能に加えて、更に、第１のデータファイルの第１の位置（始点位置）と第２の位置（終点位置）との間の位置にある第３の位置から第２の位置（終点位置）に向かってデータを送信することを要求する第３のデータ送信要求を指定する。また、指定部１１１Aは、更に、第１のデータファイルのうち、第３の位置から第１の位置（始点位置）に向かってデータを送信することを要求する第４のデータ送信要求を指定する。第３の位置の指定方法は、複数の方法がある。第１の例として、第３の位置を、第３の位置を、第１の位置（データファイルの始点位置）と第２の位置（データファイルの終点位置）との真ん中の位置と指定する方法がある（図４参照）。第２の例として、データ受信部１１３Aによる第１のデータの受信速度と第２のデータの受信速度に基づき指定する方法がある（図５参照。）
要求送信部１１２Aは、第１の実施形態に係る要求送信部１１２の機能に加えて、第３のデータ送信要求及び第４の送信要求を送信する機能を有する。第３の送信要求及び第４の送信要求を送信するタイミングは、例えば、データ受信部１１３Aが、第１のデータ及び第２のデータの受信を開始した後であって、かつ第１のデータ又は第２のデータの受信を完了する前の第１の時点とする。タイミングはこのタイミングに限られない。尚、第３の送信要求と第４の送信要求は同時に送信しても良いし異なるタイミングに送信しても良い。
【００４１】
データ受信部１１３Aは、第１のデータ送信要求〜第４のデータ送信要求に対する応答として第１のデータ〜第４のデータを受信する。
【００４２】
書き込み制御部１１４Aは、データ受信部１１３Aが、第１のデータの第１の位置（データファイルの始点位置）から第４の位置までを受信し、かつ第４のデータの第３の位置から第４の位置まで受信した時点で、第１のデータ及び第４のデータの受信を停止させても良い。書き込み制御部１１４Aは、データ受信部１１３Aが、第２のデータの第２の位置（データファイルの終点位置）から第５の位置まで受信し、かつ第３のデータの第３の位置から第５の位置まで受信した時点で、第２のデータ及び第３のデータの受信を停止させても良い。また、書き込み制御部１１４Aは、第３のデータの受信開始前と比べて第３のデータの受信開始後の方が、データ受信部１１３Aが第１のデータ又は第２のデータを受信する受信速度が遅くなった場合に、データ受信部１１３Aによる第３のデータの受信を停止させても良い。また、書き込み制御部１１４Aは、第４のデータの受信開始前と比べて第４のデータの受信開始後の方が、データ受信部１１３Aが第１のデータ又は第２のデータを受信する受信速度が遅くなった場合に、データ受信部１１３Aによる第４のデータの受信を停止させても良い。
【００４３】
次に、通信装置１１０Aの動作の具体例を説明する。２つの例を説明する。図４を用いて第１の例を説明する。図５を用いて第２の例を説明する。
【００４４】
図４は、第１のデータファイルの第１のデータ〜第４のデータの取得方法の第１例を示す図である。
【００４５】
まず、指定部１１１Aは、第１のデータ送信要求及び第２のデータ送信要求を指定する。第１のデータ送信要求として、ＨＴＴＰ  ＧＥＴ  リクエストで、図４のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定する。具体的には、データファイルとして、datafile_urlを指定する。また、第２のデータ送信要求として、ＨＴＴＰ  ＧＥＴ  リクエストで、図４のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定する。また、Ｒａｎｇｅヘッダで、データをデータファイルの終点から始点に向けて送信する要求とすることを指定する。
【００４６】
次に、要求送信部１１２Aは、指定部１１１Aが指定した第１のデータ送信要求と第２のデータ送信要求を送信する。
【００４７】
サーバ１２０は、第１データ送信要求を受け取ると、指定されたデータファイルdatafile_urlを始点位置（０バイト）から終点位置（９９９バイト）に向けて送信する。また、サーバ１２０は、サーバ１２０は、第２データ送信要求を受け取ると、指定されたデータファイルdatafile_urlを終点位置（９９９バイト）から終点位置（０バイト）に向けて送信する。
【００４８】
通信装置１１０Aのデータ受信部１１３は、第１のデータを順次受信するとともに、第２のデータを順次受信する。
【００４９】
次に、指定部１１１Aは  第３のデータ送信要求及び第４の送信要求を指定する。第３の送信要求として、ＨＴＴＰ  ＧＥＴ  リクエストで、図４のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定するとともに、Ｒａｎｇｅヘッダで、データ範囲を指定する。具体的には、データファイルとして、datafile_urlを指定する。データ範囲として、５００バイトから９９９バイトを指定する。また、指定部１１１Aは、第４のデータ送信要求として、ＨＴＴＰ  ＧＥＴ  リクエストで、図３のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定するとともに、Ｒａｎｇｅヘッダで、データ範囲を指定する。具体的には、Rａｎｇｅヘッダで、４９９バイト目から０バイト目（データファイルの始点位置）までを逆方向に取得するように指定している。図３の例では、Ｒａｎｇｅ:rbyetes=499-0  という表現で指定している。
【００５０】
次に、要求送信部１１２Aは、指定部１１１Aが指定した第３のデータ送信要求と第４のデータ送信要求を送信する。
【００５１】
通信装置１１０Aのデータ受信部１１３は、第３のデータを順次受信するとともに、第４のデータを順次受信する。
【００５２】
書き込み制御部１１４Aは、データ受信部１１３Aが、第１の送信要求に対するデータと第４の送信要求に対するデータが重なる位置まで受信することを検知すると、データ受信部１１３Aの第１のデータ及び第４のデータの受信を停止させても良い。また、書き込み制御部１１４Aは、データ受信部１１３Aが、第２の送信要求に対するデータと第３の送信要求に対するデータが重なる位置まで受信することを検知すると、データ受信部１１３Aの第２のデータ及び第３のデータの受信を停止させても良い。
【００５３】
図５は、第１のデータファイルの第１のデータ〜第４のデータの取得方法の第２例を示す図である。
【００５４】
まず、指定部１１１Aは、第１のデータ送信要求及び第２の送信要求の方法については第１例と同様であるため説明を省略し、第３の送信要求及び第４の送信要求の指定方法について説明する。
【００５５】
指定部１１１Aは  第３の送信要求として、ＨＴＴＰ  ＧＥＴ  リクエストで、図５のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定するとともに、Ｒａｎｇｅヘッダで、データ範囲を指定する。具体的には、データファイルとして、datafile_urlを指定する。データ範囲として、６６７バイトから７４９バイトを指定する。また、指定部１１１Aは、第４のデータ送信要求として、ＨＴＴＰ  ＧＥＴ  リクエストで、図５ｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定するとともに、Ｒａｎｇｅヘッダで、データ範囲を指定する。具体的には、Rａｎｇｅヘッダで、６６６バイト目から５００バイトまでを逆方向に取得するように指定する。図５の例では、Ｒａｎｇｅ:rbyetes=666-500  という表現で指定している。指定部１１１Aは、受信部７１３で測定した第１のデータ送信要求に対する応答である第１のデータの受信速度と、第２のデータ送信要求に対する応答である第２のデータの受信速度に基づいて第２の送信の要求及び第４の送信要求のデータの範囲を指定している。本例では、第１のデータの受信速度と第２のデータの受信速度の比率が２:1であるため、それに合わせて範囲を指定している。
【００５６】
次に、要求送信部１１２Aは、指定部１１１Aが指定した第３のデータ送信要求と第４のデータ送信要求を送信する。
【００５７】
通信装置１１０Aのデータ受信部１１３は、第３のデータを順次受信するとともに、第４のデータを順次受信する。
【００５８】
書き込み制御部１１４Aは、データ受信部１１３Aが、第１の送信要求に対するデータと第４の送信要求に対するデータが重なる位置まで受信することを検知すると、データ受信部１１３Aの第１のデータ及び第４のデータの受信を停止させても良い。また、書き込み制御部１１４Aは、データ受信部１１３Aが、第２の送信要求に対するデータと第３の送信要求に対するデータが重なる位置まで受信することを検知すると、データ受信部１１３Aの第２のデータ及び第３のデータの受信を停止させても良い。
【００５９】
第１の実施形態の変形例１の通信装置１１０Aによれば、サーバ１２０に対して、データファイルの始点位置から終点位置に向けてデータを送信することを要求するとともに、終点位置から始点位置までデータを送信することを要求することで、複数のデータを並列に受信する場合に、データファイル内のデータを効率的に取得することができ、第１の実施形態の通信装置１１０と同様の効果を達成することができる。更に、第１の実施形態の変形例１の通信装置１１０Aによれば、データファイルに対して、データの送信要求を送信後、追加のデータ送信要求を行っているため、更に効率的にデータファイル内のデータを効率的に取得することができる。
【００６０】
また、第１の実施形態の変形例１の通信装置１１０Aでは、もしも、第３の送信要求または第４の送信要求に対するデータの受信を途中で中断した場合でも、第３の送信要求や第４の送信要求に対する応答として受信できなかったデータを、第１のデータ送信要求や第４のデータ送信要求に対する応答としてデータを受信することができる。その結果、未取得部分につき新たなデータ送信要求する必要がなくなるといった効果も有する。
【００６１】
＜第１の実施形態の変形例２＞
図６は、第１の実施形態の変形例２にかかるシステムを示すブロック図である。
【００６２】
第１の実施形態の変形例２に係るシステムでは、サーバ１２０Bが、第１のデータファイルと、第１のデータファイルを反転させた第２のデータファイルを保持している（図７参照）。通信装置１１０Bは、サーバ１２０Bに対して、第１のデータファイルの始点位置から終点位置に向かってデータを送信することを要求（第１のデータ送信要求）するとともに、第２のデータファイルの始点位置から終点位置に向かってデータを送信することを要求（第２のデータ送信要求）する。第２のデータファイルは第１のデータファイルを反転させたデータファイルであるため、第２のデータファイルの始点位置は、第１のデータファイルの終点位置に対応し、第１のデータファイルの終点位置は、第２のデータファイルの始点位置に対応する。したがって、第１の実施形態の変形例２では、第１の実施形態で、第１のデータファイルの始点位置から終点位置に向かってデータを受信するとともに、第１のデータファイルの終点位置から始点位置に向かってデータを受信することができる点で共通する。第１の実施形態の変形例２では、通信装置１１０Bは、通常のＨＴＴP  ＧＥＴリクエストを送信することで、第１の実施形態の通信装置１１０と同様な効果を実現できる点が、第１の実施形態の通信装置１１０と異なる。  つまり、第１の実施形態の変形例２では、第１のデータファイルの終点位置から始点位置に向かった逆方向のデータ送信要求の代わりに、反転データファイルである第２のデータファイルに対して、始点位置から順方向の送信要求として実施できる。
【００６３】
通信装置１１０Bは、指定部１１１B、要求送信部１１２B、データ受信部１１３B、書き込み制御部１１４Bの機能が、第１の実施形態にかかる通信装置１１０の指定部１１１、要求送信部１１２、データ受信部１１３、書き込み制御部１１４と異なる。
【００６４】
サーバ１２０Bは、要求受信部１２１Ｂ、データ送信部１２２Ｂ、記憶部１２４Ｂの機能が、第１の実施形態に係るサーバ１２０の要求受信部１２１、データ送信部１２２、記憶部１２４と異なる。また、サーバ１２０Bは、反転部１２５Ｂを備えている点がサーバ１２０と異なる。
【００６５】
指定部１１１Bは、サーバ１２０Bが保持する第１のデータファイルの第１の始点位置から第１の終点位置に向かってデータを送信することを要求する第１のデータ送信要求を指定する。指定部１１１Bは、サーバ１２０Bが保持する第１のデータファイルを反転させた第２のデータファイル内のうち第２の始点位置から２の終点位置に向かってデータを送信することを要求する第２のデータ送信要求を指定する。例えば、第２のデータファイルは、第２のデータファイルの第２の始点位置が、第１のデータファイルの第１の終点位置に対応し、第２のデータファイルの第２の終点位置は、第１のデータファイルの第１の始点位置に対応するデータファイルである。例えば、指定部１１１Bは、第１のデータ送信要求を、ＨＴＴＰ（Hyper  Text  Transfer  Protocol）プロトコルのＧＥＴリクエストで、データ送信要求を指定する。ＧＥＴリクエストでは、どのデータファイルを取得するかＵＲＬで指定する。図７の例では、datafile_urlと指定する。また、指定部１１１Bは、第２のデータ送信要求を、ＨＴＴＰのＧＥＴリクエストで、どのデータファイルを取得するかＵＲＬで指定する。図７の例では、ＵＲＬとしてrdatafaile_urlを指定する。ここで、rdatafaile_urlのデータファイルは、datafile_urlを反転させたデータファイルであるとしている。このように第１の実施形態の変形例２では、２つのＨＴＴＰＧＥＴリクエストを、順方向のデータ送信要求を指定できる。
【００６６】
要求送信部１１２Bは、第１のデータ送信要求および第２のデータ送信要求をサーバ１２０Bに対して送信する。要求送信部１１２Bは、第１の送信要求と第２の送信要求を同時に送信しても良いし、異なるタイミングで送信しても良い。要求送信部１１２Bは、たとえば、ＨＴＴＰ（Hyper  Text  Transfer  Protocol）プロトコルのＧＥＴリクエストを送信する。
【００６７】
データ受信部１１３B、第１のデータ送信要求に対する応答として第１のデータを受信し、第２のデータ送信要求に対する応答として前記第２のデータを受信する。
【００６８】
書き込み制御部１１４Bは、データ受信部１１３Bが、第１のデータファイルの第１の始点位置から第１の位置まで受信し、第２のデータファイルの第２の始点位置から、第１のデータファイルの第１の位置に対応する位置である第２の位置まで受信した時点で、データ受信部１１３Bによる第１のデータ及び前記第２のデータの受信を停止させる。書き込み制御部１１４Bは、第１のデータと第２のデータを受信すると、第１のデータと第２のデータを用いて第１のデータファイルを復元させる。書き込み制御部１１４Bは、サーバ１２０Bであらかじめ決められた方法で反転させた第２のデータファイルに対応する第２のデータを、当該あらかじめ決められた方法で反転して第１のデータファイルの順序に復元させることで、第１のデータファイルの一部分のデータとして利用できる。したがって、書き込み制御部１１４Bは、第１のデータファイルのデータの送信要求である第１のデータ送信要求と第２のデータファイルのデータの送信要求である第２の送信要求で取得したデータとを合成して、第１のデータファイルを復元することができる。尚、書き込み制御部１１４Ｂは、データ受信部１１３Ｂが、第１のデータと第２のデータの受信完了後、データを反転、及び結合してもよいし、受信中に、反転、及び結合してもよい。
【００６９】
サーバ１２０Bは、要求受信部１２１Ｂと、データ送信部１２２Ｂと、読み込み制御部１２３と、記憶部１２４Ｂと、反転部１２５Ｂとを備える。
【００７０】
要求受信部１２１Ｂは、通信装置１１０Bから第１のデータファイル内のデータのうち第１の始点位置から第１の終点位置に向かっての第１のデータの送信要求を受信するとともに、第２のデータファイル内のデータのうち第２の始点位置から第２の終点位置に向かっての第２のデータの送信要求である第２の取得要求を受信する。
【００７１】
記憶部１２４Ｂは、第１のデータファイルと、第１のデータファイルを反転させたデータファイルである第２のデータファイルとを保持する。
【００７２】
反転部１２５Ｂは、第１のデータファイルを反転させて第２のデータファイルを生成し、記憶部１２４Ｂに記憶する。尚、反転部１２５Ｂは、あらかじめ第２のデータファイルを保持ししていても良いし、通信装置１１０Bからの要求に応じて、第１のデータファイルを動的に（内部的に，仮想的に）反転させても良い。
【００７３】
データ送信部１２２Ｂは、第１のデータの送信要求に従って第１のデータファイルの第１のデータを送信すると共に、第２のデータ送信要求に従って第２のデータファイルの第２のデータを送信する。
【００７４】
次に、図７を用いて、通信装置１１０Bの動作の具体例を説明する。図７は、第１のデータファイルの第１のデータと第２のデータファイルの第２のデータの取得方法を示す図である。
【００７５】
まず、指定部１１１Bは、第１のデータ送信要求及び第２の送信要求を指定する。第１の送信要求として、ＨＴＴＰ  ＧＥＴ  リクエストで、図７のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定する。具体的には、データファイルとして、datafile_urlを指定する。第２の送信要求として、ＨＴＴＰ  ＧＥＴ  リクエストで、図７のrｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定する。具体的には、データファイルとして、rdatafaile_urlを指定する。
【００７６】
次に、要求送信部１１２Bは、指定部１１１Bが指定した第１のデータ送信要求と第２のデータ送信要求を送信する。第１のデータ送信要求と第２のデータ送信要求は同時に送信しても良いし、異なるタイミングに送信しても良い。
【００７７】
サーバ１２０Bは、第１データ送信要求を受け取ると、指定されたデータファイルdatafile_urlを始点位置（０バイト）から終点位置（９９９バイト）に向けて送信する。また、サーバ１２０Bは、第２データ送信要求を受け取ると、指定されたデータファイルrdatafaile_urlを始点位置（０バイト）から終点位置（９９９バイト）に向けて送信する。
【００７８】
通信装置１１０Bのデータ受信部１１３は、第１のデータを順次受信するとともに、第２のデータを順次受信する。
【００７９】
書き込み制御部１１４Bは、データ受信部１１３Bが、第１のデータファイルの第１の始点位置から第１の位置まで受信し、第２のデータファイルの第２の始点位置から、第１のデータファイルの第１の位置に対応する位置である第２の位置まで受信する時点で、データ受信部１１３Bによる第１のデータ及び前記第２のデータの受信を停止させる。
【００８０】
書き込み制御部１１４Bは、第１のデータと第２のデータを受信すると、第１のデータと第２のデータを用いて第１のデータファイルを復元させる。
【００８１】
尚、本変形例では、第１のデータファイルと第２のデータファイルが別データファイルである例を説明した。しかしながら、第１のデータファイルを反転させた第２のデータファイルに対応するデータを、第１のデータファイルと同一データファイル内に保存しても良い。この場合、指定部１１１Bは、第１のデータ送信要求及び第２のデータ送信要求それぞれにつき、ＵＲＬとして第１のデータファイルを指定し、データの範囲として、Ｒａｎgeヘッダを用いて、第１のデータファイル内の保存された範囲を指定しても良い
また、第１のデータファイルを反転させて第２のデータファイルを生成する場合の反転単位は複数の方法がある。例えば、バイト・ビット単位で反転させる方法、任意のサイズ毎に反転させる方法、何らかの意味を持つ構造単位（たとえば、映像データのアクセスユニット毎）に反転させる方法、スライス単位毎に反転させる方法がある。ここで、 反転する単位を大きくすると、通信装置１１０Bで復転処理が早くなるなど扱いやすさが向上する場合もある。
【００８２】
たとえば、データファイルが１０００バイトのサイズの場合、もともと最初の１バイトから最後の１００バイトまでの順序のデータファイルを，最後の１０００バイトから最初の１バイトまで順序で１バイトずつ格納したデータファイルに反転させることができる。
【００８３】
また、データファイルのデータがデータフィールドなどで構造化されているならば，それを単位として反転させることも考えられる。たとえば，ＭＰＥＧ２−ＴＳデータファイルなどのようにデータフィールドのサイズが１８８バイトで固定であるならば、１８８バイト単位で反転させてもよいし、１８８バイトの倍数を単位として反転させてもよい。たとえば，映像フレームデータの場合は，フレーム毎にたとえば３０フレーム秒であれば１から３０の方向のデータを３０から１の方向に反転させてもよいし，毎秒毎に反転させてもよい。
【００８４】
また、第１のデータファイルを反転させた反転単位や反転方法や、第１のデータファイルを反転させたデータのデータファイルのＵＲＬやデータファイル内のデータの範囲の情報については、サーバ１２０Bから通信装置１１０Bにあらかじめ通知する等しておくと良い。例えば、サーバ１２０Bが別途データファイルやデータベース等にメタデータとして格納して、通信装置１１０Bで、第１のデータファイルを再構成する際に、サーバ１２０Bから参照できるようにしておいても良い。また、通信装置１１０Bが、事前にプログラムに組み込まれているなどして予め何らかの方法で受信側が知っていても良い。
【００８５】
また、本変形例では、書き込み制御部１１４Ｂは、第１のファイルを復元させるためのデータすべてを受信したことを検知した場合に、データの受信を停止させていたが、受信を停止させなくてもよい。また、受信を停止させるのでなく、サーバ１２０にデータの送信を停止させてもよい。
【００８６】
また、本変形例では、第１のファイルを反転させ、２つのファイルを用意したが、第１のファ第１のファイルのうち一部のデータを反転させ、２つのデータを用意してもよい。この場合、２つのデータに対して、データ送信要求を出してもよい。例えば、第１のファイルをＮ個のデータにわけて、Ｎ個のデータそれぞれについて、反転データを用意し、それぞれのデータに対してデータ送信要求を出してもよい。このような場合、データ送信要求は、２Ｎ個出すことになる。
【００８７】
また、通信装置１１０Bは、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、指定部１１１B、要求送信部１１２B、データ受信部１１３B、書き込み制御部１１４B、書き込み制御部１１４B、記憶部１１６は、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、通信装置１１０Bは、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、ＣＤ−ＲＯＭなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。また、記憶部１１６は、上記のコンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒなどの記憶媒体などを適宜利用して実現することができる。
【００８８】
また、サーバ１２０Bは、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、要求受信部１２１Ｂ、データ送信部１２２Ｂ、読み込み制御１２３、部記憶部１２４Ｂ、反転部１２５Ｂは、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、サーバ１２０Bは、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、ＣＤ−ＲＯＭなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。また、憶部８２３は、上記のコンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒなどの記憶媒体などを適宜利用して実現することができる。
【００８９】
第１の実施形態の変形例２のシステムでは、サーバ１２０Bが、第１のデータファイルを反転させた第２のデータファイルを生成するとともに、保持している。通信装置１１０Bは、サーバ１２０Bに対して、第１のデータファイルの始点位置から終点位置に向かってデータを送信することを要求（第１のデータ送信要求）するとともに、第２のデータファイルの始点位置から終点位置に向かってデータを送信することを要求（第２のデータ送信要求）することで、第１のデータファイルの始点位置から終点位置に向かってデータを受信するとともに、第１のデータファイルの終点位置から始点位置に向かってデータを受信することと同等のことを実現できる。つまり、第１の実施形態の変形例２では、通信装置１１０Bは、通常のＨＴＴP  ＧＥＴリクエストを送信することで、第１の実施形態の通信装置１１０と同様な効果を実現できる。
【００９０】
＜第１の実施形態の変形例３＞
次に、第１の実施形態の変形例３を説明する。第１の実施形態の変形例３にかかるシステムは、図６と同様である。
【００９１】
第１の実施形態の変形例３に係る通信装置１１０Ｃは、サーバ１２０Bに対して、第１のデータファイルの始点位置から終点位置に向かってデータを送信する第１のデータ送信要求と、第１のデータファイルを反転させたデータファイルである第２のデータファイルの始点位置から終点位置に向かってデータを送信することを要求する第２のデータ送信要求とをした後に、追加で、データ送信要求を出す点が、第１の実施形態の変形例２に係る通信装置１１０Bと異なる。
【００９２】
通信装置１１０Ｃは、指定部１１１Ｃ、要求送信部１１２Ｃ、データ受信部１１３Ｃの機能が第１の実施形態の変形例２に係る通信装置１１０Bと異なる。
【００９３】
指定部１１１Ｃは、第１の実施形態の変形例２の指定部１１１Bの機能に加えて、更に、第１のデータファイルの始点位置（第１の始点位置）と終点位置（第１の終点位置）との間の位置である第３の位置から第１のデータファイルの第１の終点位置に向かってデータを送信することを要求する第３のデータ送信要求を指定する。指定部１１１Ｃは、第２のデータファイルの始点位置（第２の始点位置）と終点位置（第２の終点位置）との間の位置である第４の位置から第２の終点位置に向かってデータを送信することを要求する第４のデータ送信要求を指定する。第３の位置及び第４の位置の指定方法は、複数の方法がある。第１の方法は、３の位置を、第１の始点位置と第１の終点位置との真ん中の位置と指定し、第４の位置を、第２の始点位置と第２の終点位置との真ん中の位置と指定する方法である（図８参照。）。第２の方法は、第３の位置及び第４の位置を、データ受信部１１３Ｃによる第１のデータの受信速度と第２のデータの受信速度に基づき指定する方法である。
【００９４】
要求送信部１１２Ｃは、第１の実施形態の変形例２に係る要求送信部１１２Bの機能に加えて、第３のデータ送信要求及び第４のデータ送信要求を送信する機能を有する。第３の送信要求及び第４の送信要求を送信するタイミングは、例えば、データ受信部１１３Ｃが、第１のデータ及び第２のデータの受信を開始した後であって、かつ第１のデータまたは第２のデータの受信を完了する前の第１の時点とする。タイミングはこのタイミングに限られない。尚、第３の送信要求と第４の送信要求は同時に送信しても良いし異なるタイミングに送信しても良い。
【００９５】
データ受信部１１３Ｃは、第１のデータ送信要求〜第４のデータ送信要求に対する応答として第１のデータ〜第４のデータを受信する。
【００９６】
次に、通信装置１１０Ｃの動作の具体例を説明する。
【００９７】
図８は、第１のデータファイルの第１のデータ〜第４のデータの取得方法の例を示す図である。
【００９８】
まず、指定部１１１Ｃは、第１のデータ送信要求及び第２の送信要求を指定する。第１のデータ送信要求及び第２のデータ送信要求の指定方法は第１の実施形態の変形例３と同様であるため説明を省略する。
【００９９】
次に、要求送信部１１２Ｃは、指定部１１１Ｃが指定した第１のデータ送信要求と第２のデータ送信要求を送信する。
【０１００】
通信装置１１０Ｃのデータ受信部１１３Bは、第１のデータを順次受信するとともに、第２のデータを順次受信する。
【０１０１】
次に、指定部１１１Ｃは、第３のデータ送信要求及び第４のデータ送信要求を指定する。
【０１０２】
第３のデータ送信要求として、ＨＴＴＰ  ＧＥＴ  リクエストで、図８のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定するとともに、Ｒａｎｇｅヘッダで、データ範囲を指定する。具体的には、データファイルとして、datafile_urlを指定する。データ範囲として、５００バイトから９９９バイトを指定する。第４のデータ送信要求として、ＨＴＴＰ  ＧＥＴ  リクエストで、図８のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定するとともに、Ｒａｎｇｅヘッダで、データ範囲を指定する。具体的には、データファイルとして、rdatafaile_urlを指定する。データ範囲として、５００バイトから９９９バイトを指定する。
【０１０３】
次に、要求送信部１１２Ｃは、指定部１１１Ｃが指定した第３のデータ送信要求と第４のデータ送信要求を送信する。
【０１０４】
サーバ１２０Bは、第３データ送信要求を受け取ると、指定されたデータファイルdatafile_urlを５００バイトから９９９バイトに向けて送信する。また、サーバ１２０Bは、第４データ送信要求を受け取ると、指定されたデータファイルrdatafaile_urlを始点位置５００バイトから９９９バイトに向けて送信する。
【０１０５】
通信装置１１０Ｃのデータ受信部１１３Ｃは、第３のデータを順次受信するとともに、第４のデータを順次受信する。
【０１０６】
書き込み制御部１１４Bは、第１のデータ〜第４のデータを受信すると、第１のデータ〜第４のデータを用いて第１のデータファイルを復元させる。
【０１０７】
第１の実施形態の変形例３のシステムでは、第１の実施形態の変形例２のシステムと同様の効果を達成できる。また、第１の実施形態の変形例３の通信装置１１０Ｃによれば、データの送信要求を送信後、追加のデータ送信要求を行っているため、更に効率的にデータファイル内のデータを効率的に取得することができる。
【０１０８】
＜第１の実施形態の変形例４＞
なお、第１の実施形態、及び第１の実施形態の変形例１〜３では、通信装置とサーバの役割を置き換えることができる。
【０１０９】
つまり、サーバが通信装置に対して、データの送信要求を出して、送信要求に対する応答としてデータを受信することができる。
【０１１０】
この場合、たとえば、図１又は図６の通信装置とサーバの役割をそのまま置き換えれば、同様の構成で実現できる。
【０１１１】
図９に、第１の実施形態の変形例４にかかるシステムのブロック図を示す。
【０１１２】
サーバ１１０Ｄは図６の通信装置１１０Ｂとほぼ同様の機能を備える。
【０１１３】
サーバ１１０Ｄの要求送信部１１２Ｄは、図１の通信装置１１０の要求送信部１１２Ｂと異なり、データの送信要求を出す際に、GETメソッドとは異なる方法で出す。要求送信部１１２Ｄは、たとえば、WebSocketなど、ポーリング（Ajaxなど）、ロングポーリング（Cometなど）等により、データの送信要求を出す。
【０１１４】
WebSocketの場合は、サーバ１１０Ｄは、通信装置１２０Ｄとの間で確率したコネクションを用いて、データの送信要求を送る。ポーリングでは、サーバ１１０Ｄは、通信装置１２０Ｄが定期的に出すメッセージ取得要求に対する応答の形で、データ送信要求をだす。ロングポーリングでは、サーバ１１０Ｄは、通信装置が出したメッセージ取得要求に対して、サーバ１１０Ｄの所望のタイミングで、データ送信要求をだす。
【０１１５】
なお、サーバ１１０Ｄ出すデータ送信要求は、サーバがデータファイルや取得範囲等を指定する場合や、サーバがデータファイルを受け入れる受け入れ先ＵＲＬを含む場合がある。
【０１１６】
第１の実施形態の変形例４のシステムによれば、サーバが通信装置から複数のデータを並列に取得する場合に、第１の実施形態及び第１の実施形態の変形例１〜３と同様な効果を実現できる。サーバ１１０Ｄは、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、指定部１１１Ｄ、要求送信部１１２Ｄ、データ受信部１１３Ｄ、書き込み制御部１１４Ｄ、記憶部１１５Ｄは、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、通信装置１１０Ｄは、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、ＣＤ−ＲＯＭなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。また、記憶部１１５Ｄは、上記のコンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒなどの記憶媒体などを適宜利用して実現することができる。
【０１１７】
＜第２の実施形態＞
図１０は、第２の実施形態にかかるシステムを示すブロック図である。図１０のシステムは、通信装置２１０とサーバ２２０とネットワーク１３０とから構成される。通信装置２１０は、サーバ２２０とネットワーク１３０を介して通信する。
【０１１８】
第２の実施形態にかかるシステムは、通信装置２１０が、サーバ２２０に対して、ＰＵＴ要求（データ受信要求）を送信し、データを送出している点が、ＧＥＴ要求を送信しデータを取得する第１の実施形態と異なる。
【０１１９】
通信装置２１０は、指定部２１１と、要求送信部２１２と、データ送信部２１３と、読み込み制御部２１４と、記憶部２１５と、を備える。
【０１２０】
指定部２１１は、データを、第１のデータファイルの始点位置である第１の位置から終点位置である第２の位置に向かってサーバ２２０が受信することを要求する第１のデータ受信要求を指定する。指定部２１１は、第１のデータファイル内のうち第２の位置（終点位置）から第１の位置（始点位置）に向かってデータを、サーバ２２０が受信することを要求する第２のデータ受信要求を指定する。
【０１２１】
例えば、指定部２１１は、第１のデータ受信要求を、例えば、ＨＴＴＰ（Hyper  Text  Transfer  Protocol）プロトコルのＰＵＴリクエストで、データ受信要求を指定する。ＰＵＴリクエストでは、サーバ220で保持されるどのデータファイルを宛先としてデータを送出するかＵＲＬで指定する。また、指定部２１１は、第２のデータ受信要求を、ＨＴＴＰのＰＵＴリクエストで、どのデータファイルを宛先として送出するかＵＲＬで指定するとともに、Ｒａｎｇｅヘッダによる送出範囲の指定方法を拡張して、送出方法を指定する。図１１を用いて説明する。指定部２１１は、Ｒａｎｇｅヘッダで、９９９バイト目（データファイルの終点位置）から０バイト目（データファイルの始点位置）までを逆方向（９９９バイトから０バイトに向かって）で送出するように指定している。この指定方法は現時点のＨＴＴＰプロトコルの標準仕様においては想定されていないものである。現時点でのＨＴＴＰプロトコルの標準仕様においては、Ｒａｎｇｅヘッダにおける指定方法は、ｂｙｔｅｓとしてデータファイルの始点位置から終点位置に向かって指定している。一方、本例では、Ｒａｎｇｅヘッダにおいて、ｒｂｙｔｅｓとして、データファイルのデータを逆方向で送出するように指定している。なお、逆方向に送出することを指定する方法はこの方法に限られない。例えば、ｒｂｙｔｅｓ以外の別の新たな単語を定義してもよいし、新たなリクエストコマンドやオプションヘッダを定義して識別できるようにしてもよい。また、ｂｙｔｅｓとして指定する部分はそのままとして，指定範囲の数値や記号などの記述方法を変更してもよい。たとえば Ｒａｎｇｅ： ｂｙｔｅｓ −９９９−０ などと指定しても良い。
【０１２２】
要求送信部２１２は、第１のデータ受信要求および第２のデータ受信要求をサーバ２２０に対して送信する。要求送信部２１２は、第１の受信要求を同時に送信しても良いし、異なるタイミングで送信しても良い。要求送信部２１２は、たとえば、ＨＴＴＰ（Hyper  Text  Transfer  Protocol）プロトコルのＰＵＴリクエストを送信する。
【０１２３】
データ送信部２１３は、サーバ２２０に対して、第１のデータ受信要求で指定したデータである第１のデータを送信する。データ送信部２１３は、サーバ２２０に対して、第２のデータ受信要求で指定したデータである第２のデータを送信する。データ送信部２１３は、要求送信部２１２が送信する第１のデータ受信要求、第２のデータ受信要求各々と合わせて、第１のデータ、第２のデータを送信してもよい。
【０１２４】
読み込み制御部２１４は、  第１のデータと第２のデータとを記憶部２１５から読みだして、データ送信部２１３に送信させる。読み込み制御部２１４は、  データ送信部２１３が、第１のデータを第１の位置（始点位置）から第３の位置まで送信し、かつ第２のデータを第２の位置（終点位置）から第３の位置まで送信した場合に、データ送信部２１３の第１のデータ及び第２のデータの送信処理を停止させても良い。例えば、第１のデータと第２の受信データの範囲が重複した時点でデータ送信部２１３の送信を停止させても良い。例えば、図１１の例では、第１のデータを７００バイトまで送信し、第２のデータも７００バイトまで送信に達した時点で、読み込み制御部２１４は、第１のデータと第２のデータの送信を停止させても良い。尚、読み込み制御部２１４は、第２のデータを７００バイトまで送信をする必要はなく、７０１バイトまで送信すれば、第１のデータと第２のデータの送信を停止させて良い。つまり、読み込み制御部２１４は、第１のデータと第２のデータとで、第１のデータファイル全体を送出できればよく、第１のデータと第２のデータとで重複データを送出する必要はない。
【０１２５】
記憶部２２４は、第１データファイル（第１のデータ及び第２のデータ）を記憶する。なお、記憶部２２４は、ストレージであっても、メモリ等のバッファであってもよい。
【０１２６】
サーバ２２０は、要求受信部２２１と、データ受信部２２２と、書き込み制御部２２３と、記憶部２２４とを備える。
【０１２７】
要求受信部２２１は、通信装置２１０からの第１データファイルの受信要求を受け取ると、データ受信部２２２に、受信要求に係るデータの受信を指示する。
【０１２８】
データ受信部２２２は、要求受信部２２１に指示されたデータの受信要求にしたがって、データを受信し、書き込み制御部２２３を介して、指定された宛先にデータを記憶部２２４に書き込む。
【０１２９】
書き込み制御部２２３は、受信したデータを反転および連結して第１のデータファイルを再構成する。データファイルの再構成は，データ受信部２２２が受信しながら反転および連結してもよいし，受信後に反転および連結してもよい。
【０１３０】
記憶部２２４は、第１データファイルを記憶する。なお、記憶部２２２４は、ストレージであっても、メモリ等のバッファであってもよい。なお、書き込み制御部２２３は、第１のデータと第２のデータをそのまま記憶部２２４に記憶し、第１のデータファイルの再構成は、記憶部２２４に記憶後、行ってもよい。
【０１３１】
次に、図１１を用いて、第２の実施形態のシステム動作の具体例を説明する。図１１は、第１のデータファイルの第１のデータと第２のデータの送出方法を示す図である。
【０１３２】
まず、指定部２１１は、第１のデータ受信要求及び第２の受信要求を指定する。第１の受信要求として、ＨＴＴＰ  ＰＵＴ  リクエストで、図１１のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定する。具体的には、データファイルとして、datafile_urlを指定する。また、第２の受信要求として、第２の受信要求として、ＨＴＴＰ  ＰＵＴ  リクエストで、図１１のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定する。また、Ｒａｎｇｅヘッダで、データをデータファイルの終点から始点に向けて受信する要求とすることを指定する。具体的には、Rａｎｇｅヘッダで、９９９バイト目（データファイルの終点位置）から０バイト目（データファイルの始点位置）までを逆方向に送出するように指定している。図１１の例では、Ｒａｎｇｅ:rbyetes=990-0  という表現で指定している。
【０１３３】
要求送信部２１２は、指定部２１１が指定した第１のデータ受信要求と第２のデータ受信要求を送信する。第１のデータ受信要求と第２の受信要求は同時に送信しても良いし、異なるタイミングに送信しても良い。
【０１３４】
サーバ２２０は、第１データ受信要求を受け取ると、指定された宛先のデータファイルdatafile_urlを始点位置（０バイト）から終点位置（９９９バイト）に向けて受信する。また、サーバ２２０は、サーバ２２０は、第２データ受信要求を受け取ると、指定された宛先のデータファイルdatafile_urlを終点位置（９９９バイト）から始点位置（０バイト）に向けて受信する。
【０１３５】
通信装置２１０のデータ送信部２１３は、第１のデータを順次送信するとともに、第２のデータを順次送信する。
【０１３６】
読み込み制御部２１４は、データ送信部２１３が、第１の受信要求に対するデータと第２の受信要求に対するデータが重なる位置に達するまで送信したことを検知すると、データ送信部２１３の第１のデータ及び第２のデータの送信を停止させても良い。例えば、第１の受信要求に対するデータを７００バイトまで送信し、第２の送信要求に対するデータを７００バイトまで送信した時点でデータの送信を停止させる。尚、読み込み制御部２１４は、第２のデータを７００バイトまで送信をする必要はなく、７０１バイトまで送信すれば、第１のデータと第２のデータの送信を停止させて良い。つまり、読み込み制御部２１４は、第１のデータと第２のデータとで、第１のデータファイル全体を送出できればよく、第１のデータと第２のデータとで重複データを送出する必要はない。
【０１３７】
サーバ２２０の書き込み部２２３は、第１のデータ受信要求、第２のデータ受信要求各々に対応するデータ受信部２２２が受信すると、受信要求にしたがって第１のデータと第２のデータを記憶部２２４に記憶する。なお、書き込み制御部２２３は、第１のデータと第２のデータをそのまま記憶部２２４に記憶してもよいし、第１のデータファイルに再現して記憶してもよい。
【０１３８】
尚、通信装置２１０は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、指定部２１１、要求送信部２１２、データ送信部２１３、読み込み制御部２１４、記憶部２１５は、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、通信装置２１０は、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、ＣＤ−ＲＯＭなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。また、記憶部２１５は、上記のコンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒなどの記憶媒体などを適宜利用して実現することができる。
【０１３９】
第２の実施形態の通信装置２１０によれば、サーバ２２０に対して、データファイルの始点位置から終点位置に向けてデータを受信することを要求するとともに、終点位置から始点位置までデータを受信することを要求することで、複数のデータを並列に送信する場合に、データファイル内のデータを効率的に送出することができる。第１のデータ受信要求に対するデータの送信スピードと第２のデータ受信要求に対するデータの送出スピードが異なっても、第１のデータ受信要求と第２のデータ受信要求は逆方向に向かってデータを送出し、データ範囲はある時点で重なることになり、効率的にデータファイルのデータを送出することができる。
【０１４０】
＜第２の実施形態の変形例１＞
次に、第２の実施形態の変形例１を説明する。なお、第２の実施形態の変形例１のシステム構成は図１０と同様である。
【０１４１】
第２の実施形態の変形例１に係る通信装置２１０Aは、データファイルの始点位置から終点位置に向かう第１のデータ受信要求と、終点位置から始点位置に向かう第２のデータ受信要求を出した後に、追加でデータ受信要求を出す点が、第２の実施形態に係る通信装置２１０と異なる。
【０１４２】
通信装置２１０Aは、指定部２１１A、要求送信部２１２A、データ送信部２１３A、読み込み制御部２１４Aの機能が第２の実施形態に係る通信装置２１０と異なる。
【０１４３】
指定部２１１Aは、第２の実施形態の指定部２１１の機能に加えて、更に、第１のデータファイルの第１の位置（始点位置）と第２の位置（終点位置）との間の位置にある第３の位置から第２の位置（終点位置）に向かってデータを受信することをサーバ２２０に対して要求する第３のデータ受信要求を指定する。また、指定部２１１Aは、更に、第１のデータファイルのうち、第３の位置から第１の位置（始点位置）に向かってデータを受信することをサーバ２２０に対して要求する第４のデータ受信要求を指定する。第３の位置の指定方法は、複数の方法がある。第１の例として、第３の位置を、第３の位置を、第１の位置（データファイルの始点位置）と第２の位置（データファイルの終点位置）との真ん中の位置と指定する方法がある（図１２参照）。第２の例として、データ送信部２１３Aによる第１のデータの送信速度と第２のデータの送信速度に基づき指定する方法がある（図１３参照。）
要求送信部２１２Aは、第２の実施形態に係る要求送信部２１２の機能に加えて、第３のデータ受信要求及び第４の受信要求を送信する機能を有する。第３の受信要求及び第４の受信要求を送信するタイミングは、例えば、データ送信部２１３Aが、第１のデータ及び第２のデータの送信を開始した後であって、かつ第１のデータ又は第２のデータの送信を完了する前の第１の時点とする。タイミングはこのタイミングに限られない。尚、第３の送信要求と第４の送信要求は同時に送信しても良いし異なるタイミングに送信しても良い。
【０１４４】
データ送信部２１３Aは、第１のデータ受信要求〜第４のデータ受信要求に対応するデータである第１のデータ〜第４のデータを送信する。第１のデータ〜第４のデータは各々、第１のデータ受信要求〜第４のデータ受信要求と合わせて送ってもよい。
【０１４５】
読み込み制御部２１４Aは、データ送信部２１３Aが、第１のデータの第１の位置（データファイルの始点位置）から第４の位置までを送信し、かつ第４のデータの第３の位置から第４の位置まで送信した時点で、第１のデータ及び第４のデータの送信を停止させても良い。読み込み制御部２１４Aは、データ送信部２１３Aが、第２のデータの第２の位置（データファイルの終点位置）から第５の位置まで送信し、かつ第３のデータの第３の位置から第５の位置まで送信した時点で、第２のデータ及び第３のデータの送信を停止させても良い。また、読み込み制御部２１４Aは、第３のデータの送信開始前と比べて第３のデータの送信開始後の方が、データ送信部２１３Aが第１のデータ又は第２のデータを送信する送信速度が遅くなった場合に、データ送信部２１３Aによる第３のデータの送信を停止させても良い。また、読み込み制御部２１４Aは、第４のデータの送信開始前と比べて第４のデータの送信開始後の方が、データ送信部２１３Aが第１のデータ又は第２のデータを送信する受信速度が遅くなった場合に、データ送信部２１３Aによる第４のデータの送信を停止させても良い。
【０１４６】
次に、通信装置２１０Aの動作の具体例を説明する。２つの例を説明する。図１２を用いて第１の例を説明する。図１３用いて第２の例を説明する。
【０１４７】
図１２は、第１のデータファイルの第１のデータ〜第４のデータの送出方法の第１例を示す図である。
【０１４８】
まず、指定部２１１Aは、第１のデータ受信要求及び第２のデータ受信要求を指定する。第１のデータ受信要求として、ＨＴＴＰ  ＰＵＴ  リクエストで、図１２のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定する。具体的には、データファイルとして、datafile_urlを指定する。また、第２のデータ受信要求として、ＨＴＴＰ  ＰＵＴ  リクエストで、図１２のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定する。また、Ｒａｎｇｅヘッダで、データをデータファイルの終点から始点に向けて受信する要求とすることを指定する。
【０１４９】
次に、要求送信部２１２Aは、指定部２１１Aが指定した第１のデータ受信要求と第２のデータ受信要求を送信する。
【０１５０】
サーバ２２０は、第１データ受信要求を受け取ると、指定されたデータファイルdatafile_urlを始点位置（０バイト）から終点位置（９９９バイト）に向けて受信する。また、サーバ２２０は、サーバ２２０は、第２データ受信要求を受け取ると、指定されたデータファイルdatafile_urlを終点位置（９９９バイト）から終点位置（０バイト）に向けて受信する。
【０１５１】
通信装置２１０Aのデータ送信部２１３は、第１のデータを順次送信するとともに、第２のデータを順次送信する。
【０１５２】
次に、指定部２１１Aは  第３のデータ受信要求及び第４の受信要求を指定する。第３の受信要求として、ＨＴＴＰ  ＰＵＴ  リクエストで、図１２のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定するとともに、Ｒａｎｇｅヘッダで、データ範囲を指定する。具体的には、データファイルとして、datafile_urlを指定する。データ範囲として、５００バイトから９９９バイトを指定する。また、指定部２１１Aは、第４のデータ受信要求として、ＨＴＴＰ  ＰＵＴ  リクエストで、図１２のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定するとともに、Ｒａｎｇｅヘッダで、データ範囲を指定する。具体的には、Rａｎｇｅヘッダで、４９９バイト目から０バイト目（データファイルの始点位置）までを逆方向に送出するように指定している。図１１の例では、Ｒａｎｇｅ:rbyetes=499-0  という表現で指定している。
【０１５３】
次に、要求送信部２１２Aは、指定部２１１Aが指定した第３のデータ受信要求と第４のデータ受信要求を送信する。
【０１５４】
通信装置２１０Aのデータ送信部２１３は、第３のデータを順次送信するとともに、第４のデータを順次送信する。
【０１５５】
読み込み制御部２１４Aは、データ送信部２１３Aが、第１の受信要求に対するデータと第４の受信要求に対するデータが重なる位置まで送信したことを検知すると、データ送信部２１３Aの第１のデータ及び第４のデータの送信を停止させても良い。また、読み込み制御部２１４Aは、データ送信部２１３Aが、第２の受信要求に対するデータと第３の受信要求に対するデータが重なる位置まで送信したことを検知すると、データ送信部２１３Aの第２のデータ及び第３のデータの送信を停止させても良い。
【０１５６】
図１３は、第１のデータファイルの第１のデータ〜第４のデータの送出方法の第２例を示す図である。
【０１５７】
まず、指定部２１１Aは、第１のデータ受信要求及び第２の受信要求の方法については第１例と同様であるため説明を省略し、第３の受信要求及び第４の受信要求の指定方法について説明する。
【０１５８】
指定部２１１Aは  第３の受信要求として、ＨＴＴＰ  ＰＵＴ  リクエストで、図１３のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定するとともに、Ｒａｎｇｅヘッダで、データ範囲を指定する。具体的には、データファイルとして、datafile_urlを指定する。データ範囲として、６６７バイトから７４９バイトを指定する。また、指定部２１１Aは、第４のデータ受信要求として、ＨＴＴＰ  ＰＵＴ  リクエストで、図１３ｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定するとともに、Ｒａｎｇｅヘッダで、データ範囲を指定する。具体的には、Rａｎｇｅヘッダで、６６６バイト目から５００バイトまでを逆方向に送出するように指定する。図１３の例では、Ｒａｎｇｅ:rbyetes=666-500  という表現で指定している。指定部２１１Aは、受信部７１３で測定した第１のデータ受信要求に対する応答である第１のデータの受信速度と、第２のデータ受信要求に対する応答である第２のデータの受信速度に基づいて第２の送信の要求及び第４の受信要求のデータの範囲を指定している。本例では、第１のデータの受信速度と第２のデータの受信速度の比率が２:1であるため、それに合わせて範囲を指定している。
【０１５９】
次に、要求送信部２１２Aは、指定部２１１Aが指定した第３のデータ受信要求と第４のデータ受信要求を送信する。
【０１６０】
通信装置２１０Aのデータ送信部２１３は、第３のデータを順次送信するとともに、第４のデータを順次送信する。
【０１６１】
読み込み制御部２１４Aは、データ送信部２１３Aが、第１の受信要求に対するデータと第４の受信要求に対するデータが重なる位置まで送信することを検知すると、データ送信部２１３Aの第１のデータ及び第４のデータの送信を停止させても良い。また、読み込み制御部２１４Aは、データ送信部２１３Aが、第２の受信要求に対するデータと第３の受信要求に対するデータが重なる位置まで送信したことを検知すると、データ送信部２１３Aの第２のデータ及び第３のデータの送信を停止させても良い。
【０１６２】
第２の実施形態の変形例１の通信装置２１０Aによれば、サーバ２２０に対して、データファイルの始点位置から終点位置に向けてデータを受信することを要求するとともに、終点位置から始点位置までデータを図新することを要求することで、複数のデータを並列に送信する場合に、データファイル内のデータを効率的に送出することができ、第２の実施形態の通信装置２１０と同様の効果を達成することができる。更に、第２の実施形態の変形例１の通信装置２１０Aによれば、データファイルに対して、データの受信要求を送信後、追加のデータ受信要求を行っているため、更に効率的にデータファイル内のデータを効率的に送出することができる。
【０１６３】
また、第２の実施形態の変形例１の通信装置２１０Aでは、もしも、第３の受信要求または第４の受信要求に対するデータの送信を途中で中断した場合でも、第３の受信要求や第４の受信要求に対応するデータであって送信できなかったデータを、第１のデータ受信要求や第４のデータ受信要求に対するデータとして送信することができる。その結果、未送出部分につき新たなデータ受信要求を要求する必要がなくなるといった効果も有する。
【０１６４】
＜第２の実施形態の変形例２＞
図１４は、第２の実施形態の変形例２にかかるシステムを示すブロック図である。
【０１６５】
第２の実施形態の変形例２に係るシステムでは、サーバ２２０Bが、第１のデータファイルと、第１のデータファイルを反転させた第２のデータファイルを保持している（図１５参照）。通信装置２１０Bは、サーバ２２０Bに対して、第１のデータファイルの始点位置から終点位置に向かってデータを受信することを要求（第１のデータ受信要求）するとともに、第２のデータファイルの始点位置から終点位置に向かってデータを受信することを要求（第２のデータ受信要求）する。第２のデータファイルは第１のデータファイルを反転させたデータファイルであるため、第２のデータファイルの始点位置は、第１のデータファイルの終点位置に対応し、第１のデータファイルの終点位置は、第２のデータファイルの始点位置に対応する。したがって、第２の実施形態の変形例２では、第２の実施形態で、第１のデータファイルの始点位置から終点位置に向かってデータを送信するとともに、第１のデータファイルの終点位置から始点位置に向かってデータを送信することができる点で共通する。第２の実施形態の変形例２では、通信装置２１０Bは、通常のＨＴＴP  ＰＵＴリクエストを送信することで、第２の実施形態の通信装置２１０と同様な効果を実現できる点が、第２の実施形態の通信装置２１０と異なる。  つまり、第２の実施形態の変形例２では、第１のデータファイルの終点位置から始点位置に向かった逆方向のデータ受信要求の代わりに、反転データファイルである第２のデータファイルに対して、始点位置から順方向の受信要求として実施できる。
【０１６６】
通信装置２１０Bは、指定部２１１B、要求送信部２１２B、データ送信部２１３B、読み込み制御部２１４B、記憶部２１５Ｂの機能が、第２の実施形態にかかる通信装置２１０の指定部２１１、要求送信部２１２、データ送信部２１３、読み込み制御部２１４、記憶部２１５と異なる。また、通信装置２１０Ｂは、反転部２１６Ｂを備えている点が通信装置２１０と異なる。
【０１６７】
サーバ２２０Bは、要求受信部２２１Ｂ、データ受信部２２２Ｂ、書き込み制御部２２３Ｂ、記憶部２２４Ｂの機能が、第２の実施形態に係るサーバ２２０の要求受信部２２１、データ受信部２２２、書き込み制御部２２３、記憶部２２４と異なる。
【０１６８】
指定部２１１Bは、第１のデータファイルのデータを第１の始点位置から第１の終点位置に向かって、サーバ２２０Ｂが受信することを要求する第１のデータ受信要求を指定する。指定部２１１Bは、第１のデータファイルを反転させた第２のデータファイル内のデータを、第２の始点位置から２の終点位置に向かって、サーバ２２０Ｂが受信することを要求する第２のデータ受信要求を指定する。例えば、第２のデータファイルは、第２のデータファイルの第２の始点位置が、第１のデータファイルの第１の終点位置に対応し、第２のデータファイルの第２の終点位置は、第１のデータファイルの第１の始点位置に対応するデータファイルである。例えば、指定部２１１Bは、第１のデータ受信要求を、ＨＴＴＰ（Hyper  Text  Transfer  Protocol）プロトコルのＰＵＴリクエストで、データ受信要求を指定する。ＰＵＴリクエストでは、どのデータファイルを宛先として送出するかＵＲＬで指定する。図１５の例では、datafile_urlと指定する。また、指定部２１１Bは、第２のデータ受信要求を、ＨＴＴＰのＰＵＴリクエストで、どのデータファイルを宛先として送出するかＵＲＬで指定する。図１５の例では、ＵＲＬとしてrdatafaile_urlを指定する。ここで、rdatafaile_urlのデータファイルは、datafile_urlを反転させたデータファイルであるとしている。このように第２の実施形態の変形例２では、２つのＨＴＴＰ  ＰＵＴリクエストを、順方向のデータ受信要求を指定できる。
【０１６９】
要求送信部２１２Bは、第１のデータ受信要求および第２のデータ受信要求をサーバ２２０Bに対して送信する。要求送信部２１２Bは、第１の受信要求と第２の受信要求を同時に送信しても良いし、異なるタイミングで送信しても良い。要求送信部２１２Bは、たとえば、ＨＴＴＰ（Hyper  Text  Transfer  Protocol）プロトコルのＰＵＴリクエストを送信する。
【０１７０】
データ送信部２１３B、第１のデータ受信要求に対応する第１のデータを送信し、第２のデータ受信要求に対応する第２のデータを送信する。第１及び第２のデータは各々、第１のデータ受信要求及び第２のデータ受信要求と共に送信してもよい。
【０１７１】
読み込み制御部２１４Bは、データ送信部２１３Bが、第１のデータファイルの第１の始点位置から第１の位置まで送信し、第２のデータファイルの第２の始点位置から、第１のデータファイルの第１の位置に対応する位置である第２の位置まで送信した時点で、データ送信部２１３Bによる第１のデータ及び前記第２のデータの送信を停止させる。
【０１７２】
記憶部２１５Ｂは、第１のデータファイルと、第１のデータファイルを反転させたデータファイルである第２のデータファイルとを保持する。
【０１７３】
反転部２１６Ｂは、第１のデータファイルを反転させて第２のデータファイルを生成し、記憶部２１６Ｂに記憶する。尚、反転部２１５Ｂは、あらかじめ第２のデータファイルを保持ししていても良いし、データ送信部２１３Ｂがデータを送信する際に、第１のデータファイルを動的に（内部的に，仮想的に）反転させても良い。
【０１７４】
サーバ２２０Bは、要求受信部２２１Ｂと、データ受信部２２２Ｂと、書き込み制御部２２３と、記憶部２２４Ｂと、反転部１２５Ｂとを備える。
【０１７５】
要求受信部２２１Ｂは、通信装置２１０Bから第１のデータファイル内のデータのうち第１の始点位置から第１の終点位置に向かっての第１のデータの受信要求を受信するとともに、第２のデータファイル内のデータのうち第２の始点位置から第２の終点位置に向かっての第２のデータの受信要求を受信する。
【０１７６】
データ受信部２２２Ｂは、第１のデータの受信要求に従って第１のデータファイルの第１のデータを受信すると共に、第２のデータ受信要求に従って第２のデータファイルの第２のデータを受信する。
【０１７７】
書き込み制御部２２３Ｂは、受信要求に従って、第１のデータと第２のデータを記憶部２２４Ｂに記憶する。書き込み制御部２２３Ｂは、第１のデータと第２のデータを第１のデータファイル、第２のデータファイルに分けて記憶してもよいし、第１のデータファイルを復元して記憶してもよい。復元する場合、書き込み制御部２２３は、通信装置２１０Bであらかじめ決められた方法で反転させた第２のデータファイルに対応する第２のデータを、当該あらかじめ決められた方法で反転して第１のデータファイルの順序に復元させることで、第１のデータファイルの一部分のデータとして利用できる。したがって、書き込み制御部２２３Bは、第１のデータファイルのデータの受信要求である第１のデータ受信要求と第２のデータファイルのデータの受信要求である第２の受信要求で送出したデータとを合成して、第１のデータファイルを復元することができる。
【０１７８】
記憶部２２４Ｂは、受信した第１のデータ及び第２のデータを、第１のデータファイル及び第２のデータファイルとして記憶する。記憶部２２４Ｂは、第１のデータ及び第２のデータを第１のデータファイルに復元させて記憶してもよい。なお、記憶部２２４Ｂは、ストレージであっても、メモリ等のバッファであってもよい。書き込み制御部２２３Ｂは、第１のデータと第２のデータを記憶部２２４Ｂに書き込んでから、第１のデータファイルを復元してもよい。
【０１７９】
次に、図１５を用いて、通信装置２１０Bの動作の具体例を説明する。図１５は、第１のデータファイルの第１のデータと第２のデータファイルの第２のデータの送出方法を示す図である。
【０１８０】
まず、指定部２１１Bは、第１のデータ受信要求及び第２の受信要求を指定する。第１の受信要求として、ＨＴＴＰ  ＰＵＴ  リクエストで、図１５のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定する。具体的には、データファイルとして、datafile_urlを指定する。第２の受信要求として、ＨＴＴＰ  ＰＵＴ  リクエストで、図１５のrｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定する。具体的には、データファイルとして、rdatafaile_urlを指定する。
【０１８１】
次に、要求送信部２１２Bは、指定部２１１Bが指定した第１のデータ受信要求と第２のデータ受信要求を送信する。第１のデータ受信要求と第２のデータ受信要求は同時に送信しても良いし、異なるタイミングに送信しても良い。
【０１８２】
サーバ２２０Bは、第１データ受信要求を受け取ると、指定されたデータファイルdatafile_urlを始点位置（０バイト）から終点位置（９９９バイト）に向けて受信する。また、サーバ２２０Bは、第２データ受信要求を受け取ると、指定されたデータファイルrdatafaile_urlを始点位置（０バイト）から終点位置（９９９バイト）に向けて受信する。
【０１８３】
通信装置２１０Bのデータ送信部２１３は、第１のデータを順次受信するとともに、第２のデータを順次受信する。
【０１８４】
読み込み制御部２１４Bは、データ送信部２１３Bが、第１のデータファイルの第１の始点位置から第１の位置まで送信し、第２のデータファイルの第２の始点位置から、第１のデータファイルの第１の位置に対応する位置である第２の位置まで送信する時点で、データ送信部２１３Bによる第１のデータ及び前記第２のデータの送信を停止させる。
【０１８５】
書き込み制御部２２３Bは、第１のデータと第２のデータを受信すると、第１のデータと第２のデータを用いて第１のデータファイルを復元させてもよい。
【０１８６】
尚、本実施形態では、第１のデータファイルと第２のデータファイルが別データファイルである例を説明した。しかしながら、第１のデータファイルを反転させた第２のデータファイルに対応するデータを、第１のデータファイルと同一データファイル内に保存しても良い。この場合、指定部２１１Bは、第１のデータ受信要求及び第２のデータ受信要求それぞれにつき、ＵＲＬとして第１のデータファイルを指定し、データの範囲として、Ｒａｎgeヘッダを用いて、第１のデータファイル内の保存された範囲を指定しても良い
また、第１のデータファイルを反転させて第２のデータファイルを生成する場合の反転単位は複数の方法がある。例えば、バイト・ビット単位で反転させる方法、任意のサイズ毎に反転させる方法、何らかの意味を持つ構造単位（たとえば、映像データのアクセスユニット毎）に反転させる方法、スライス単位毎に反転させる方法がある。ここで、 反転する単位を大きくすると、サーバ２２０Ｂで復転処理が早くなるなど扱いやすさが向上する場合もある。
【０１８７】
たとえば、データファイルが１０００バイトのサイズの場合、もともと最初の１バイトから最後の１００バイトまでの順序のデータファイルを，最後の１０００バイトから最初の１バイトまで順序で１バイトずつ格納したデータファイルに反転させることができる。
【０１８８】
また、データファイルのデータがデータフィールドなどで構造化されているならば，それを単位として反転させることも考えられる。たとえば，ＭＰＥＧ２−ＴＳデータファイルなどのようにデータフィールドのサイズが１８８バイトで固定であるならば、１８８バイト単位で反転させてもよいし、１８８バイトの倍数を単位として反転させてもよい。たとえば，映像フレームデータの場合は，フレーム毎にたとえば３０フレーム秒であれば１から３０の方向のデータを３０から１の方向に反転させてもよいし，毎秒毎に反転させてもよい。
【０１８９】
尚、第１のデータファイルを反転させた反転単位や反転方法や、第１のデータファイルを反転させたデータのデータファイルのＵＲＬやデータファイル内のデータの範囲の情報については、通信装置２１０Bからサーバ２２０Bにあらかじめ通知する等しておくと良い。例えば、通信装置２１０Bが別途データファイルやデータベース等にメタデータとして格納して、サーバ２２０Bで、第１のデータファイルを再構成する際に、サーバ２２０Bから参照できるようにしておいても良い。また、サーバ２２０Bが、事前にプログラムに組み込まれているなどして予め何らかの方法で受信側が知っていても良い。
【０１９０】
また、通信装置２１０Bは、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、指定部２１１B、要求送信部２１２B、データ送信部２１３B、読み込み制御部２１４B、記憶部２１５Ｂ、反転部２１６Ｂは、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、通信装置２１０Bは、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、ＣＤ−ＲＯＭなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。また、記憶部２１５Ｂは、上記のコンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒなどの記憶媒体などを適宜利用して実現することができる。
【０１９１】
また、サーバ２２０Bは、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、要求受信部２２１Ｂ、データ受信部２２２Ｂ、書き込み制御部２２３Ｂ、記憶部２２４Ｂは、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、サーバ２２０Bは、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、ＣＤ−ＲＯＭなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。また、記憶部２２４Ｂは、上記のコンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒなどの記憶媒体などを適宜利用して実現することができる。
【０１９２】
第２の実施形態の変形例２のシステムでは、通信装置２１０Bは、サーバ２２０Bに対して、第１のデータファイルの始点位置から終点位置に向かってデータを受信することを要求（第１のデータ受信要求）するとともに、第２のデータファイルの始点位置から終点位置に向かってデータを受信することを要求（第２のデータ受信要求）することで、第１のデータファイルの始点位置から終点位置に向かってデータを送信するとともに、第１のデータファイルの終点位置から始点位置に向かってデータを送信することと同等のことを実現できる。つまり、第２の実施形態の変形例２では、通信装置２１０Bは、通常のＨＴＴP  ＰＵＴリクエストを送信することで、第２の実施形態の通信装置２１０と同様な効果を実現できる。
【０１９３】
＜第２の実施形態の変形例３＞
次に、第２の実施形態の変形例３を説明する。第２の実施形態の変形例３にかかるシステムは、図１４と同様である。
【０１９４】
第２の実施形態の変形例３に係る通信装置２１０Ｃは、サーバ２２０Bに対して、第１のデータファイルの始点位置から終点位置に向かってデータを受信する第１のデータ受信要求と、第１のデータファイルを反転させたデータファイルである第２のデータファイルの始点位置から終点位置に向かってデータを受信することを要求する第２のデータ受信要求とをした後に、追加で、データ受信要求を出す点が、第２の実施形態の変形例２に係る通信装置２１０Bと異なる。
【０１９５】
通信装置２１０Ｃは、指定部２１１Ｃ、要求送信部２１２Ｃ、データ送信部２１３Ｃの機能が第２の実施形態の変形例２に係る通信装置２１０Bと異なる。
【０１９６】
指定部２１１Ｃは、第２の実施形態の変形例２の指定部２１１Bの機能に加えて、更に、第１のデータファイルの始点位置（第１の始点位置）と終点位置（第１の終点位置）との間の位置である第３の位置から第１のデータファイルの第１の終点位置に向かってデータを受信することを要求する第３のデータ受信要求を指定する。指定部２１１Ｃは、第２のデータファイルの始点位置（第２の始点位置）と終点位置（第２の終点位置）との間の位置である第４の位置から第２の終点位置に向かってデータを受信することを要求する第４のデータ受信要求を指定する。第３の位置及び第４の位置の指定方法は、複数の方法がある。第１の方法は、３の位置を、第１の始点位置と第１の終点位置との真ん中の位置と指定し、第４の位置を、第２の始点位置と第２の終点位置との真ん中の位置と指定する方法である（図１６参照。）。第２の方法は、第３の位置及び第４の位置を、データ送信部２１３Ｃによる第１のデータの受信速度と第２のデータの受信速度に基づき指定する方法である。
【０１９７】
要求送信部２１２Ｃは、第２の実施形態の変形例２に係る要求送信部２１２Bの機能に加えて、第３のデータ受信要求及び第４のデータ受信要求を送信する機能を有する。第３の受信要求及び第４の受信要求を送信するタイミングは、例えば、データ送信部２１３Ｃが、第１のデータ及び第２のデータの受信を開始した後であって、かつ第１のデータまたは第２のデータの受信を完了する前の第１の時点とする。タイミングはこのタイミングに限られない。尚、第３の受信要求と第４の受信要求は同時に送信しても良いし異なるタイミングに送信しても良い。
【０１９８】
データ送信部２１３Ｃは、第１のデータ受信要求〜第４のデータ受信要求に対応する第１のデータ〜第４のデータを送信する。
【０１９９】
次に、通信装置２１０Ｃの動作の具体例を説明する。
【０２００】
図１６は、第１のデータファイルの第１のデータ〜第４のデータの送出方法の例を示す図である。
【０２０１】
まず、指定部２１１Ｃは、第１のデータ受信要求及び第２の受信要求を指定する。第１のデータ受信要求及び第２のデータ受信要求の指定方法は第２の実施形態の変形例３と同様であるため説明を省略する。
【０２０２】
次に、要求送信部２１２Ｃは、指定部２１１Ｃが指定した第１のデータ受信要求と第２のデータ受信要求を送信する。
【０２０３】
通信装置２１０Ｃのデータ送信部２１３Bは、第１のデータを順次送信するとともに、第２のデータを順次送信する。
【０２０４】
次に、指定部２１１Ｃは、第３のデータ受信要求及び第４のデータ受信要求を指定する。
【０２０５】
第３のデータ受信要求として、ＨＴＴＰ  ＰＵＴ  リクエストで、図１６のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定するとともに、Ｒａｎｇｅヘッダで、データ範囲を指定する。具体的には、データファイルとして、datafile_urlを指定する。データ範囲として、５００バイトから９９９バイトを指定する。第４のデータ受信要求として、ＨＴＴＰ  ＰＵＴ  リクエストで、図１６のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルを指定するとともに、Ｒａｎｇｅヘッダで、データ範囲を指定する。具体的には、データファイルとして、rdatafaile_urlを指定する。データ範囲として、５００バイトから９９９バイトを指定する。
【０２０６】
次に、要求送信部２１２Ｃは、指定部２１１Ｃが指定した第３のデータ受信要求と第４のデータ受信要求を送信する。
【０２０７】
サーバ２２０Bは、第３データ受信要求を受け取ると、指定されたデータファイルdatafile_urlを５００バイトから９９９バイトに向けて受信する。また、サーバ２２０Bは、第４データ受信要求を受け取ると、指定されたデータファイルrdatafaile_urlを始点位置５００バイトから９９９バイトに向けて受信する。
【０２０８】
サーバ２２０Ｂの書き込み制御部２２３Bは、第１のデータ〜第４のデータを受信すると、第１のデータ〜第４のデータを用いて第１のデータファイルを復元させる。
【０２０９】
第２の実施形態の変形例３のシステムでは、第２の実施形態の変形例２のシステムと同様の効果を達成できる。また、第２の実施形態の変形例３の通信装置２１０Ｃによれば、データの受信要求を送信後、追加のデータ受信要求を行っているため、更に効率的にデータファイル内のデータを効率的に送出することができる。
【０２１０】
尚、第２の実施形態、及び第２の実施形態の変形例１〜３では、データ受信要求をＰＵＴメソッドを用いる例で説明したが、これに限られない。例えば、ＰＯＳＴメソッドを用いて、データ受信要求をだすことができる。
【０２１１】
＜第２の実施形態の変形例４＞
第２の実施形態、及び第２の実施形態の変形例１〜３では、通信装置とサーバの役割を置き換えることができる。
【０２１２】
つまり、サーバが通信装置に対して、データの受信要求を出して、受信要求に対応するデータを送信することができる。
【０２１３】
この場合、たとえば、図１０又は図１４の通信装置とサーバの役割をそのまま置き換えれば、同様の構成で実現できる。
【０２１４】
図１７に、第２の実施形態の変形例４にかかるシステムのブロック図を示す。
【０２１５】
サーバ２１０Ｄは図１０の通信装置２１０又は図１４の通信装置２１０Ｂとほぼ同様の機能を備える。
【０２１６】
サーバ２１０Ｄの要求送信部２１２Ｄは、図１４の通信装置２１０の要求送信部２１２Ｂと異なり、データの受信要求を出す際に、ＰＵＴメソッドとは異なる方法で出す。要求送信部２１２Ｄは、たとえば、WebSocketなど、ポーリング（Ajaxなど）、ロングポーリング（Cometなど）等により、データの受信要求を出す。
【０２１７】
WebSocketの場合は、サーバ２１０Ｄは、通信装置２２０Ｄとの間で確立したコネクションを用いて、データの受信要求を送る。
【０２１８】
ポーリングでは、サーバ２１０Ｄは、通信装置２２０Ｄが定期的に出すメッセージ取得要求に対する応答の形で、データ受信要求をだす。
【０２１９】
ロングポーリングでは、サーバ２１０Ｄは、通信装置が出したメッセージ取得要求に対して、サーバ２１０Ｄの所望のタイミングで、データ受信要求をだす。
【０２２０】
なお、サーバ２１０Ｄ出すデータ受信要求は、サーバがデータファイルや送信範囲等を指定する場合や、サーバがデータファイルを送信する送信先ＵＲＬを含む場合がある。
【０２２１】
第２の実施形態の変形例４のシステムによれば、サーバが通信装置から複数のデータを並列に送出する場合に、第２の実施形態及び第２の実施形態の変形例１〜３と同様な効果を実現できる。サーバ２１０Ｄは、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、指定部２１１Ｄ、要求送信部２１２Ｄ、データ受信部２１３Ｄ、書き込み制御部２１４Ｄ、記憶部２１５Ｄは、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、通信装置２１０Ｄは、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、ＣＤ−ＲＯＭなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。また、記憶部２１５Ｄは、上記のコンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒなどの記憶媒体などを適宜利用して実現することができる。
【０２２２】
＜第３の実施形態＞
図１８は、本発明の第３の実施形態にかかるシステムを示すブロック図である。図１８のシステムは、通信装置３１０とサーバ３２０とネットワーク１３０とから構成される。通信装置３１０は、サーバ３２０とネットワーク１３０を介して通信する。
【０２２３】
通信装置３１０は、指定部３１１と、要求送信部３１２と、データ受信部３１３と、書き込み制御部３１４と、記憶部３１５と、を備える。
【０２２４】
指定部３１１は、サーバ３２０が保持する第１のデータファイル内の第１の範囲を指定する。また、指定部３１１は、第１のデータファイル内の第１の範囲と異なる第２の範囲を指定する。指定部３１１は、例えば、第１の範囲として、第１のデータファイルの始点位置である第１の位置から第２の位置までの範囲を指定する。指定部３１１は、第２の範囲として、第１の位置と、第１のデータファイルの終点位置である第３の位置と、の真ん中の位置である第４の位置から第３の位置（第１のデータファイルの終点位置）までの範囲を指定する。例えば、指定部３１１は、ＨＴＴＰ（Hyper  Text  Transfer  Protocol）プロトコルのＧＥＴリクエストでデータファイルと範囲を指定する。ＨＴＴＰのＧＥＴリクエストでは、どのデータファイルを取得するかＵＲＬで指定する。ＨＴＴＰのＧＥＴリクエストでは、データファイルの中のどの範囲を指定するかを、Ｒａｎｇｅヘッダで指定する。指定部３１１は、第２の範囲を、データ受信部３１３の受信状況を観測しながら動的に指定しても良いし、あらかじめ決められた内容を指定しても良い。
【０２２５】
要求送信部３１２は、第１の時点に、第１のデータファイル内の第１の範囲に位置する第１のデータの送信要求をサーバ３２０に対して送信する。要求送信部３１２は、第１の時点と異なる第２の時点に、第１のデータファイル内の第２の範囲に位置する第２のデータの送信要求をサーバ３２０に対して送信する。ここで、第２の時点は、データ受信部３１３が第１のデータの受信を開始した後、データ受信部３１３が第１のデータの受信を完了する前であるとする。要求送信部３１２は、たとえば、ＨＴＴＰ（Hyper  Text  Transfer  Protocol）プロトコルのＧＥＴリクエストを送信する。
【０２２６】
データ受信部３１３は、サーバ３２０から、第１のデータを受信する。データ受信部３１３は、第２のデータを受信する。
【０２２７】
書き込み制御部３１４は、第１のデータと第２のデータとを連結して第１のデータファイルを再構成する。尚、書き込み制御部３１４は、第１のデータと第２のデータとを全て受信後、第１のデータと第２のデータとを結合してもよいし、第１のデータと第２のデータとを受信しながら、第１のデータと第２のデータを結合しても良い。書き込み制御部３１４は、第２のデータの受信開始前と比べて第２のデータ開始後の方が、データ受信部３１３が第１のデータを受信する受信速度が遅くなる場合に、第２のデータの受信を停止させても良い。また、書き込み制御部３１４は、データ受信部３１３が、第１の範囲と第２の範囲が重複する場合、データ受信部３１３が、第１のデータを第３の位置まで受信した時点で、第１のデータの受信を停止させても良い。つまり、第１のデータと第２のデータの受信したデータが重複した場合、第１のデータの受信を停止してもよい。
【０２２８】
サーバ３２０は、要求受信部３２１と、データ送信部３２２と、読み込み制御部３２３と、記憶部３２４とを備える。
【０２２９】
要求受信部３２１は、通信装置３１０からの第１データファイルの中のデータの送信要求を受け取ると、データ送信部３２２に、送信要求に係るデータの送信を指示する。
【０２３０】
データ送信部３２２は、要求受信部３２１に指示されたデータを記憶部３２４から読みだして送信する。
【０２３１】
読み込み制御部３２３は、記憶部３２４から、要求受信部３２１が受信した指示にしたがって、第１データファイルを読み出す。
【０２３２】
記憶部３２４は、第１データファイルを記憶する。
【０２３３】
次に、図１９及び図２０を用いて、通信装置３１０の動作の具体例を説明する。図１９は、通信装置３１０の動作を示すフローチャートである。図２０は、第１のデータファイルの第１のデータと第２のデータの取得範囲を示す図である。
【０２３４】
まず、指定部３１１は、第１のデータ送信要求で要求するデータファイルと範囲を指定する。具体的には、ＨＴＴＰ  ＧＥＴ  リクエストで、図２０のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルで、Ｒａｎｇｅで指定される第１の範囲を指定する。具体的には、データファイルとして、ｄａｔａｆｉｌｅ＿ｕｒｌを指定し、第１の範囲として、０−４９９バイトを指定する。指定部３１１への入力は、通信装置３１０のユーザが入力するものであっても良いし、あらかじめ組み込まれたプログラムで定められていても良い。そして、要求送信部３１２は、指定部３１１が指定したデータファイルの第１の範囲のデータの第１データ送信要求（ＨＴＴＰ  ＧＥＴ  リクエスト）を送信する（S２０１）。要求送信部３１２は、例えば、指定部３１１が指定した範囲のGETリクエストを、例えば、IPパケットで送信する。ここで、図２０に示すように、データファイルｄａｔａｆｉｌｅ＿ｕｒｌは、全体のデータファイルサイズは１０００バイトである。また、前述した第１の位置（第１のデータファイルの始点位置）は０バイトに対応する。第２の位置は、４９９バイト目に対応する。第３の位置（第１のデータファイルの終点位置）は、９９９バイトに対応する。
【０２３５】
サーバ３２０は、第１データ送信要求を受け取ると、指定されたデータファイルｄａｔａｆｉｌｅ＿ｕｒｌの第１の範囲（０−４９９バイト）のデータの送信を開始する。
【０２３６】
そして、通信装置３１０のデータ受信部３１３は、第１のデータの受信を開始する（S２０２）。
【０２３７】
次に、指定部３１１は、第２のデータ送信要求で要求するデータファイルと範囲を指定する。具体的には、データファイルとして、ｄａｔａｆｉｌｅ＿ｕｒｌを指定し、第２の範囲として、５００−９９９バイトを指定する。そして、要求送信部１１０は、指定部３１１が指定したデータファイルの第２の範囲のデータの第２データ送信要求（ＨＴＴＰ  ＧＥＴ  リクエスト）を送信する（S２０３）。ここで、前述した第４の位置は５００バイト目に対応する。第３の位置（第１のデータファイルの終点位置）は、９９９バイトに対応する。
【０２３８】
サーバ３２０は、第２データ送信要求を受け取ると、指定されたデータファイルdatafile_urlの第２の範囲（５００−９９９バイト）のデータの送信を開始する。
【０２３９】
そして、通信装置３１０のデータ受信部３１３は、第２のデータの受信を開始し、第１のデータ及び第２のデータの受信を並列して受信する（S２０４）。
【０２４０】
データ受信部３１３は、第１のデータをすべて受信し、第２のデータをすべて受信すると、第１のデータファイルの全データを受信できることとなる（S２０５）。
【０２４１】
ここで、書き込み制御部３１４は、第２のデータの受信を開始することで、第１のデータの受信速度が遅くなった場合、第２のデータの受信を停止させても良い。
【０２４２】
尚、本実施形態では、第１のデータ送信要求で指定の範囲を、０バイトから４９９バイトとしたが、これに限られない。例えば、０バイトから８００バイトなどとしても良い。また、第１のデータ送信要求で、データファイルのみ指定し、データの範囲を指定しなくてもよい（図２１参照）。この場合、第１のデータ送信要求は、データファイル全体の送信要求になる。この場合、書き込み制御部３１４は、第１のデータを４９９バイトまで受信したタイミングで、データ受信部３１３に第１のデータの受信を停止させることができる。
【０２４３】
尚、第３の実施形態では、通信装置３１０は、サーバ３２０に対して、データ送信要求を出す例を説明したが、第２の実施形態と同様、データ受信要求を出すことができる。また、第１の実施形態の変形例４のように、通信装置３１０とサーバ３２０の役割を置き換えて説明できる。この場合、サーバ３２０から通信装置に要求を出す場合には、WebSocketなど、ポーリング（Ajaxなど）、ロングポーリング（Cometなど）等を用いて実現する。
【０２４４】
また、通信装置３１０は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、指定部３１１と、要求送信部３１２と、データ受信部３１３と、書き込み制御部３１４と、記憶部３１５と、は、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、通信装置３１０は、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、ＣＤ−ＲＯＭなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。また、記憶部３１５は、上記のコンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒなどの記憶媒体などを適宜利用して実現することができる。
【０２４５】
第３の実施形態の通信装置３１０によれば、データファイルに対して、第１のデータの送信要求を送信後、第１のデータの受信中に、第２のデータの送信要求を追加で要求できるため、複数のデータを並列に受信する場合に、データファイル内のデータを効率的に取得することができる。また、本実施形態では、第２のデータの取得範囲を、データファイルの未取得データの半分の位置から指定しているため、第１のデータと第２のデータの取得完了タイミングを近いタイミングにすることができる。
【０２４６】
＜第３の実施形態の変形例１＞
次に、第３の実施形態の変形例１を説明する。なお、第３の実施形態の変形例１のシステム構成は図１８と同様である。
【０２４７】
第３の実施形態の変形例１に係る通信装置３１０Ａは、第１のデータファイル内の複数の範囲のデータのデータ送信要求を同時に送信し、その後、第１のデータファイル内の別の範囲のデータのデータ送信要求を追加で送信する。第３の実施形態の変形例１に係る通信装置３１０Ａは、指定部３１１Ａ及び要求送信部３１２Ａの機能が第３の実施形態に係る通信装置３１０と異なる（図２２及び図２３参照）。
【０２４８】
指定部３１１Ａは、サーバ３２０が保持する第１のデータファイル内の各々異なる範囲である第１の範囲〜第４の範囲を指定する。指定部３１１Ａは、例えば、第１の範囲として、第１のデータファイルの始点位置である第１の位置から第２の位置までの範囲を指定する。指定部３１１Ａは、第２の範囲として、第１の位置と第１のデータファイルの終点位置である第３の位置との真ん中の位置である第４の位置から第５の位置までを指定する。指定部３１１Ａは、第３の範囲として、第１の位置と第４の位置との真ん中の位置である第６の位置から第２の位置までを指定する。指定部３１１Ａは、第４の位置と第３の位置との真ん中の位置である第７の位置から第３の位置までを第４の範囲と指定する。
【０２４９】
要求送信部３１２Ａは、第１の時点に、第１のデータファイル内の前記第１の範囲に位置する第１のデータの送信要求をサーバ３２０に対して送信するとともに、第１のデータファイル内の第２の範囲に位置する第２のデータの送信要求をサーバ３２０に対して送信する（図２２参照）。要求送信部３１２Ａは、第１の時点と異なる第２の時点に、第１のデータファイル内の第３の範囲に位置する第３のデータの送信要求をサーバ３２０に対して送信するとともに、第１のデータファイル内の第４の範囲に位置する第４のデータの送信要求をサーバ３２０に対して送信する（図２３参照）。第２の時点は、データ受信部３１３が第１のデータ及び第２のデータの受信を開始した後、データ受信部３１３が第１のデータ又は第２のデータの受信を完了する前であるとする。
【０２５０】
データ受信部３１３Ａは、サーバ３２０Ａから、第１のデータ、第２のデータ、第３のデータ、第４のデータを受信する
書き込み制御部３１４Ａは、第１のデータと第２のデータと第３のデータと第４のデータとを連結して第１のデータファイルを再構成する。尚、書き込み制御部３１４Ａは、第１のデータと第２のデータと第３のデータと第４のデータを全て受信後、第１のデータ〜第４のデータとを結合してもよいし、第１のデータ〜第４のデータとを受信しながら、第１のデータ〜第４のデータを結合しても良い。
【０２５１】
次に、図２２及び図２３を用いて、通信装置３１０Ａの動作の具体例を説明する。図２２は、第１の時点で要求するデータ送信要求のデータ範囲を示す図である。図２３は、第２の時点で、要求するデータ送信要求のデータ範囲を示す図である。
【０２５２】
まず、指定部３１１Ａは、図２２に示すように、第１のデータ送信要求及び第２のデータ送信要求で要求するデータファイルと範囲を指定する。具体的には、ＨＴＴＰ  ＧＥＴ  リクエストで、図２２のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルで、Ｒａｎｇｅで指定される第１の範囲及び第２の範囲を指定する。具体的には、データファイルとして、ｄａｔａｆｉｌｅ＿ｕｒｌを指定し、第１の範囲として、０−４９９バイトをし、第２の範囲として、５００−９９９バイトを指定する。そして、要求送信部３１２Ａは、指定部３１１Ａが指定したデータファイルの第１の範囲及び第２の範囲のデータの送信要求である第１データ送信要求及び第２のデータ送信要求（ＨＴＴＰ  ＧＥＴ  リクエスト）として送信する。
【０２５３】
次に、指定部３１１Ａは、図２３に示すように、第３のデータ送信要求及び第４のデータ送信要求で要求するデータファイルと範囲を指定する。具体的には、ＨＴＴＰ  ＧＥＴ  リクエストで、図２３のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルで、Ｒａｎｇｅで指定される第３の範囲及び第４の範囲を指定する。具体的には、データファイルとして、ｄａｔａｆｉｌｅ＿ｕｒｌを指定し、第３の範囲として、２５０−４９９バイトを指定し、第４の範囲として、７５０−９９９バイトを指定する。そして、要求送信部３１２Ａは、指定部３１１Ａが指定したデータファイルの第１の範囲及び第２の範囲のデータの送信要求である第１のデータ送信要求及び第２のデータ送信要求（ＨＴＴＰ  ＧＥＴ  リクエスト）として送信する。
【０２５４】
通信装置３１０Ａのデータ受信部３１３は、第１〜第４のデータを受信する。書き込み制御部３１４Ａは、第１〜第４データを結合することで第１のデータファイルを再現する。
【０２５５】
ここで、書き込み制御部３１４Ａは、第３のデータ及び第４のデータの受信を開始することで、第１のデータまたは第３のデータの受信速度が遅くなった場合、第３のデータまたは第４のデータの受信を停止させても良い。また、書き込み制御部３１４Ａは、データ受信部３１３が第１のデータを２４９バイトまで受信した時点で、第１のデータの受信を停止させることができる。また、書き込み制御部３１４Ａは、データ受信部３１３が、第２のデータを７４９バイトまで受信した時点で、第２のデータの受信を停止させることができる。
【０２５６】
尚、本実施形態では、第１のデータ送信要求で指定の範囲を、０バイトから４９９バイトとしたが、これに限られない。例えば、第１のデータ送信要求で、データファイルのみ指定し、データの範囲を指定しなくてもよい（図２１参照）。この場合、第１のデータ送信要求は、データファイル全体の送信要求になる。
【０２５７】
第３の実施形態の変形例１の通信装置３１０Ａによれば、データファイルに対して、第１のデータ及び第２のデータ送信要求を送信後、第１のデータ及び第２のデータの受信中に、第３のデータ及び第４のデータ送信要求を追加で要求できるため、複数のデータを並列に受信する場合に、データファイル内のデータを効率的に取得することができる。また、本実施形態では、第３のデータ及び第４のデータの取得範囲を、データファイルの未取得データの半分の位置から指定しているため、第１のデータ〜第４のデータの取得完了タイミングを近いタイミングにすることができる。
【０２５８】
＜第３の実施形態の変形例２＞
次に、第３の実施形態の変形例２を説明する。なお、第３の実施形態の変形例２のシステム構成は図１８と同様である。
【０２５９】
第３の実施形態の変形例２に係る通信装置３１０Ｂは、第１のデータファイル内の複数の範囲のデータのデータ送信要求を同時に送信し、その後、第１のデータファイル内の別の範囲のデータのデータ送信要求を追加で送信する場合を想定している。そして、追加のデータ送信要求の第１のデータファイル内の範囲の指定を、最初の複数の範囲のデータの送信要求に対するデータの受信速度に基づき決定している点が第３の実施形態の変形例１と異なる（図２５を参照）。
【０２６０】
第３の実施形態の変形例２に係る通信装置３１０Ｂは、指定部３１１Ｂ、要求送信部３１２Ｂ、及びデータ受信部３１３Ｂの機能が第３の実施形態の変形例１に係る通信装置３１０Ａと異なる。
【０２６１】
指定部３１１Ｂは、サーバ３２０が保持する第１のデータファイル内の各々異なる範囲である第１の範囲〜第２の範囲を指定する。指定部３１１Ｂは、例えば、第１の範囲として、第１のデータファイルの始点位置である第１の位置から第２の位置までの範囲を指定する。指定部３１１Ｂは、第２の範囲として、第１の位置と第１のデータファイルの終点位置である第３の位置との真ん中の位置である第４の位置から第５の位置までを指定する。指定部３１１Ｂは、データ受信部３１３Ｂによる第１のデータの受信速度と第２のデータの受信速度に基づき、第３の範囲を指定する。具体例は後述する。
【０２６２】
要求送信部３１２Ｂは、第１の時点に、第１のデータファイル内の第１の範囲に位置する第１のデータの送信要求をサーバ３２０に対して送信するとともに、第１のデータファイル内の第２の範囲に位置する第２のデータの送信要求をサーバ３２０に対して送信する（図２４参照）。要求送信部３１１Ｂは、第１の時点と異なる第２の時点に、第１のデータファイル内の第３の範囲に位置する第３のデータの送信要求をサーバ３２０に対して送信する（図２５参照。）。第２の時点は、例えば、データ受信部３１３Ｂが第１のデータ及び第３のデータの受信を開始した後、データ受信部３１３Ｂが第１のデータ又は第２のデータの受信を完了する前であるとする。ここで、第２のデータ送信要求を第１の送信要求に対するデータすべてを受信した後に行う場合、第２のデータ送信要求で用いるHTTPコネクションを、第１の送信要求で用いたHTTPコネクションと同一のHTTPコネクションとすることができる。
【０２６３】
受信部３１３Ｂは、サーバ３２０Ｂから、第１のデータ、第２のデータ、第３のデータを受信する。また、受信部３１３Ｂは、第１のデータの受信速度と第２のデータの受信速度を測定する。
【０２６４】
書き込み制御部３１４Ｂは、第１のデータと第２のデータと第３のデータを連結して第１のデータファイルを再構成する。
【０２６５】
次に、図２４及び図２５を用いて、通信装置３１０Ｂの動作の具体例を説明する。図２４は、第１の時点で要求するデータ送信要求のデータ範囲を示す図である。図２５は、第２の時点で、要求するデータ送信要求のデータ範囲を示す図である。
【０２６６】
まず、指定部３１１Ｂは、図２４に示すように、第１のデータ送信要求及び第２のデータ送信要求で要求するデータファイルと範囲を指定する。具体的には、ＨＴＴＰ  ＧＥＴ  リクエストで、図２４のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルで、Ｒａｎｇｅで指定される第１の範囲及び第２の範囲を指定する。具体的には、データファイルとして、ｄａｔａｆｉｌｅ＿ｕｒｌを指定し、第１の範囲として、０−４９９バイトをし、第２の範囲として、５００−９９９バイトを指定する。そして、要求送信部３１２は、指定部３１１Ｂが指定したデータファイルの第１の範囲及び第２の範囲のデータの送信要求である第１のデータ送信要求及び第２のデータ送信要求（ＨＴＴＰ  ＧＥＴ  リクエスト）として送信する。
【０２６７】
次に、データ受信部３１３Ｂは、第１データ及び第２データを順次受信するまた、データ受信部３１３Ｂは、第１データの受信データ量又は受信速度と第２データの受信データ量又は受信速度をそれぞれ測定する。
【０２６８】
次に、指定部３１１Ｂは、図２４に示すように、第３のデータ送信要求で要求するデータファイルと範囲を指定する。具体的には、ＨＴＴＰ  ＧＥＴ  リクエストで、図２４のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルで、Ｒａｎｇｅで指定される第３の範囲を指定する。具体的には、データファイルとして、ｄａｔａｆｉｌｅ＿ｕｒｌを指定する。指定部３１１Ｂは、第３の範囲を、第１データ及び第２データのデータ受信量、又は受信速度に基づき決定する。例えば、図２５のように、第１データを０バイト目から４９９バイト目までを受信した時点で、第２データを５００バイト目から７４９バイト目まで受信した場合を考える。この場合、第３の範囲として、８３３バイトから９９９バイトを指定する。
【０２６９】
図２５の例では、第１の送信要求による受信データ量と第２のデータ送信要求による受信データ量の比率が２：１であるため、第３の範囲として、未取得部分（７５０バイトから９９９バイト）の後半２／３を指定した。第３のデータ送信要求が第１の送信要求とデータ受信速度が同一であれば、第３のデータ送信要求に対するデータ受信が完了する時点で、第２のデータ送信要求に対するデータの受信は７４９バイトまでになる。その結果、データファイル全体のデータ取得を効率よく行うことができる。ここで、例えば、第３のデータ送信要求で用いるＨＴＴPコネクションと、第１の送信要求で用いたHTTPコネクションを同一にすることで、第１の送信要求、第３のデータ送信要求に対するデータ受信速度を同じにすることが可能となる場合がある。HTTPコネクションを同一とすることで、新たにコネクションを確立するオーバーヘッドをなくすことができる。
【０２７０】
要求送信部３１２Ｂは、指定部３１１Ｂが指定したデータファイルの第３の範囲のデータの送信要求である第３のデータ送信要求（ＨＴＴＰ  ＧＥＴ  リクエスト）を送信する。
【０２７１】
通信装置３１０Ｂのデータ受信部３１３Ｂは、更に第２、第３のデータを受信する。
【０２７２】
書き込み制御部３１４Ｂは、第１〜第３データを結合することで第１のデータファイルを再現する。
【０２７３】
ここで、書き込み制御部３１４Ｂは、第３のデータの受信を開始することで、第１のデータまたは第２のデータの受信速度が遅くなった場合、第３のデータの受信を停止させても良い
尚、本実施形態では、第１のデータ送信要求で指定の範囲を、０バイトから４９９バイトとしたが、これに限られない。例えば、第１のデータ送信要求で、データファイルのみ指定し、データの範囲を指定しなくてもよい（図２１参照）。この場合、第１のデータ送信要求は、データファイル全体の送信要求になる。この場合、書き込み制御部３１４Ｂは、データ受信部３１３Ｂが第１のデータを４９９バイトまで受信した時点で、第１のデータの受信を停止させることができる。
【０２７４】
第３の実施形態の変形例２の通信装置３１０Ｂによれば、ある１つのデータファイルに対して、第１のデータ及び第２のデータ送信要求を送信後、第３のデータ送信要求を追加で要求できるため、データファイル内のデータを効率的に取得することができる。特に、第３のデータの送信要求で指定の範囲を、第１のデータ及び第２のデータ受信速度に基づいて指定するため、より効率的にデータファイル内のデータを取得できる。また、本実施形態では、第１のデータ送信要求と第３のデータ送信要求とで同一コネクションを流用可能であり、新たにコネクションを確立するオーバーヘッドなしに、効率的にデータファイル内のデータを取得する効果も有する。
【０２７５】
＜第３の実施形態の変形例３＞
次に、第３の実施形態の変形例３を説明する。なお、第３の実施形態の変形例３のシステム構成は図１８と同様である。
【０２７６】
第３の実施形態の変形例３に係る通信装置３１０Ｃは、第１のデータファイル内の複数の範囲のデータのデータ送信要求を同時に送信し、その後、第１のデータファイル内の別の範囲のデータのデータ送信要求を追加で送信する場合を想定している。そして、追加のデータ送信要求の第１のデータファイル内の範囲の指定を、最初の複数の範囲のデータの送信要求に対するデータの受信速度に基づき決定している。第３の実施形態の変形例３では、最初の複数の範囲の指定及び追加のデータ送信要求の範囲の指定の仕方が第３の実施形態の変形例２と異なる（図２７を参照）。
【０２７７】
第３の実施形態の変形例２に係る通信装置３１０Ｃは、指定部３１１Ｃ、要求送信部３１２Ｃ、及びデータ受信部３１３Ｃの機能が第３の実施形態の変形例２に係る通信装置３１０と異なる。
【０２７８】
指定部３１１Ｃは、サーバ３２０Ｃが保持する第１のデータファイル内の各々異なる範囲である第１の範囲〜第２の範囲を指定する。指定部３１１Ｃは、例えば、第１の範囲として、第１のデータファイルの始点位置である第１の位置から第２の位置までの範囲を指定する。指定部３１１Ｃは、第２の範囲として、第１の位置と第１のデータファイルの終点位置である第３の位置との３/４の位置である第４の位置から第５の位置までを指定する。指定部３１１Ｃは、データ受信部３１３Ｃによる第１のデータの受信速度と第２のデータの受信速度に基づき、第３の範囲を指定する。具体例は後述する。
【０２７９】
要求送信部３１２Ｃは、第１の時点に、第１のデータファイル内の前記第１の範囲に位置する第１のデータの送信要求をサーバ３２０Ｃに対して送信するとともに、第１のデータファイル内の第２の範囲に位置する第２のデータの送信要求をサーバ３２０Ｃに対して送信する。要求送信部３１２Ｃは、第１の時点と異なる第２の時点に、第１のデータファイル内の第３の範囲に位置する第３のデータの送信要求をサーバ３２０Ｃに対して送信する（図２７参照。）。第２の時点は、データ受信部３１３Ｃが第１のデータ及び第２のデータの受信を開始した後、データ受信部３１３Ｃが第１のデータまたは第２のデータの受信を完了する前であるとする。ここで、第３のデータ送信要求を、第２のデータ送信要求に対するデータすべてを受信した後に行う場合、第３のデータ送信要求で用いるHTTPコネクションを、第２のデータ送信要求で用いたHTTPコネクションと同一のHTTPコネクションとすることができる。
【０２８０】
受信部３１３Ｃは、サーバ３２０Ｃから、第１のデータ、第２のデータ、第３のデータを受信する。また、受信部３１３Ｃは、第１のデータの受信速度と第２のデータの受信速度を測定する。
【０２８１】
書き込み制御部３１４Ｃは、第１のデータと第２のデータと第３のデータを連結して第１のデータファイルを再構成する。
【０２８２】
次に、図２６及び図２７を用いて、通信装置３１０Ｃの動作の具体例を説明する。図２６は、第１の時点で要求するデータ送信要求のデータ範囲を示す図である。図２７は、第２の時点で、要求するデータ送信要求のデータ範囲を示す図である。
【０２８３】
まず、指定部３１１Ｃは、図２６に示すように、第１のデータ送信要求及び第２のデータ送信要求で要求するデータファイルと範囲を指定する。具体的には、ＨＴＴＰ  ＧＥＴ  リクエストで、図２６のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルで、Ｒａｎｇｅで指定される第１の範囲及び第２の範囲を指定する。具体的には、データファイルとして、ｄａｔａｆｉｌｅ＿ｕｒｌを指定し、第１の範囲としてデータファイルの全体を指定し、第２の範囲として、７５０−９９９バイトを指定する。ここで、第１の範囲として、データファイル全体をしているので、Rangeにより範囲を指定していない。要求送信部３１２Ｃは、指定部３１１Ｃが指定したデータファイルの第１の範囲及び第２の範囲のデータの送信要求である第１データ送信要求及び第３データ送信要求（ＨＴＴＰ  ＧＥＴ  リクエスト）として送信する。
【０２８４】
次に、データ受信部３１３Ｃは、第１データ及び第３データを順次受信するまた、データ受信部３１３Ｃは、第１データの受信速度と第３データの受信データ量又は受信速度をそれぞれ測定する。
【０２８５】
次に、指定部３１１Ｃは、図２６に示すように、第３のデータ送信要求で要求するデータファイルと範囲を指定する。具体的には、ＨＴＴＰ  ＧＥＴ  リクエストで、図２７のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルで、Ｒａｎｇｅで指定される第３の範囲を指定する。具体的には、データファイルとして、ｄａｔａｆｉｌｅ＿ｕｒｌを指定する。指定部３１１Ｂは、第３の範囲を、第１データ及び第３データのデータ受信量、又は受信速度に基づき決定する。例えば、図２７のように、第１データを０バイト目から４９９バイト目までを受信した時点で、第３データを７５０バイト目から９９９バイト目まで受信した場合を考える。この場合、第３の範囲として、６６７バイトから７４９バイトを指定する（図２７参照）。
【０２８６】
図２７の例では、第１の送信要求に対するデータ受信速度と第２のデータ送信要求に対するデータ受信速度の比率が２：１であるため、第３の範囲として、未取得部分（５００バイトから７４９ババイト）の後半２/３と指定している。第２のデータ送信要求と第３のデータ送信要求に対するデータ受信速度が同一であれば、第３のデータ送信要求に対するデータ受信が完了する時点で、第１のデータ送信要求に対するデータの受信は６６７バイトまでとなる。その結果、データファイル全体のデータ取得を効率よく行うことができる。ここで、例えば、第３のデータ送信要求では、第２のデータ送信要求で用いたHTTPコネクションと同一のHTTPコネクションを用いれば、第３のデータ送信要求と第２のデータ送信要求に対するデータ受信速度を同じにできる場合がある。
【０２８７】
要求送信部３１２Ｃは、指定部３１１Ｃが指定したデータファイルの第３の範囲のデータの送信要求である第３のデータ送信要求（ＨＴＴＰ  ＧＥＴ  リクエスト）を送信する。
【０２８８】
通信装置３１０Ｃのデータ受信部３１３Ｃは、更に第１のデータ及び第２のデータを受信する。
【０２８９】
書き込み制御部３１４Ｃは、第１〜第３データを結合することで第１のデータファイルを再現する。
【０２９０】
ここで、書き込み制御部３１４Ｃは、第３のデータの受信を開始することで、第１のデータまたは第２のデータの受信速度が遅くなった場合、第３のデータの受信を停止させても良い。
【０２９１】
第３の実施形態の変形例３の通信装置３１０Ｃによれば、ある１つのデータファイルに対して、第１のデータ及び第２のデータ送信要求を送信後、第１のデータ及び第２のデータの受信中に、第３のデータ送信要求を追加で要求できるため、複数のデータを並列に受信する場合に、データファイル内のデータを効率的に取得することができる。特に、第３のデータの送信要求で指定の範囲を、第１のデータ及び第２のデータ受信速度に基づいて指定するため、より効率的にデータファイル内のデータを取得できる。また、本実施形態では、第２のデータ送信要求と第３のデータ送信要求とで同一コネクションを流用可能であり、新たにコネクションを確立するオーバーヘッドなしに、効率的にデータファイル内のデータを取得する効果も有する。
【０２９２】
＜第３の実施形態の変形例４＞
次に、第３の実施形態の変形例４を説明する。なお、第３の実施形態の変形例４のシステム構成は図１８と同様である。
【０２９３】
第３の実施形態の変形例４に係る通信装置３１０Ｄは、第１のデータファイル内の複数の範囲のデータのデータ送信要求を同時に送信し、その後、第１のデータファイル内の別の範囲のデータのデータ送信要求を追加で送信する場合を想定している。そして、追加のデータ送信要求の第１のデータファイル内の範囲の指定の仕方が、第３の実施形態の変形例３と異なる（図２８を及び図２９参照）。
【０２９４】
第３の実施形態の変形例４に係る通信装置３１０Ｄは、指定部３１１Ｄ、要求送信部３１２Ｄ、及びデータ受信部３１３Ｄの機能が第３の実施形態の変形例３に係る通信装置３１０Ｂと異なる。
【０２９５】
指定部３１１Ｄは、サーバ３２０が保持する第１のデータファイル内の各々異なる範囲である第１の範囲〜第２の範囲を指定する。指定部３１１Ｄは、例えば、第１の範囲として、第１のデータファイルの始点位置である第１の位置から第２の位置までの範囲を指定する。指定部３１１Ｄは、第２の範囲として、第１の位置と第１のデータファイルの終点位置である第３の位置との３/４の位置である第４の位置から第３の位置までを指定する。指定部３１１Ｄは、第２の範囲として、第１の位置と第１のデータファイルの終点位置である第３の位置との１／２の位置である第５の位置から第４の位置までを指定する。
【０２９６】
要求送信部３１２Ｄは、第１の時点に、第１のデータファイル内の第１の範囲に位置する第１のデータの送信要求をサーバ３２０Ｄに対して送信するとともに、第２の範囲に位置する第２のデータの送信要求をサーバ３２０Ｄに対して送信する。要求送信部３１２Ｄは、第１の時点と異なる第２の時点に、第１のデータファイル内の第３の範囲に位置する第３のデータの送信要求をサーバ３２０Ｄに対して送信する（図２９参照）。第２の時点は、データ受信部３１３が第１のデータ及び第２のデータの受信を開始した後、データ受信部３１３Ｄが第１のデータまたは第２のデータの受信を完了する前であるとする。
【０２９７】
データ受信部３１３Ｄは、サーバ３２０Ｄから、第１のデータ、第２のデータ、第３のデータを受信する。
【０２９８】
書き込み制御部３１４Ｄは、第１のデータと第２のデータと第３のデータを連結して第１のデータファイルを再構成する。
【０２９９】
次に、図２８及び図２９を用いて、通信装置３１０Ｄの動作の具体例を説明する。図２８は、第１の時点で要求するデータ送信要求のデータ範囲を示す図である。図２９は、第２の時点で、要求するデータ送信要求のデータ範囲を示す図である。
【０３００】
まず、指定部３１１Ｄは、図２８に示すように、第１のデータ送信要求及び第２のデータ送信要求で要求するデータファイルと範囲を指定する。具体的には、ＨＴＴＰ  ＧＥＴ  リクエストで、図２８のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルで、Ｒａｎｇｅで指定される第１の範囲及び第２の範囲を指定する。具体的には、データファイルとして、ｄａｔａｆｉｌｅ＿ｕｒｌを指定し、第１の範囲としてデータファイルの全体を指定し、第２の範囲として、７５０−９９９バイトを指定する。ここで、第１の範囲はRangeで指定していない。そして、要求送信部３１２Ｄは、指定部３１１Ｄが指定したデータファイルの第１の範囲及び第２の範囲のデータの送信要求である第１データ送信要求及び第３データ送信要求（ＨＴＴＰ  ＧＥＴ  リクエスト）として送信する。
【０３０１】
次に、データ受信部３１３Ｄは、第１のデータ及び第２のデータを順次受信する。
【０３０２】
次に、指定部３１１Ｄは、図２９に示すように、第３のデータ送信要求で要求するデータファイルと範囲を指定する。具体的には、ＨＴＴＰ  ＧＥＴ  リクエストで、図２９のｄａｔａｆｉｌｅ＿ｕｒｌで特定されるデータファイルで、Ｒａｎｇｅで指定される第３の範囲を指定する。具体的には、データファイルとして、ｄａｔａｆｉｌｅ＿ｕｒｌを指定する。指定部３１１Ｄは、第３の範囲として、５００バイトから７４９バイトを指定する。
【０３０３】
そして、要求送信部３１２Ｄは、指定部３１１Ｄが指定したデータファイルの第３の範囲のデータの送信要求である第２データ送信要求（ＨＴＴＰ  ＧＥＴ  リクエスト）を送信する。
【０３０４】
通信装置３１０Ｄのデータ受信部３１３Ｄは、第１〜第３のデータを受信する。
【０３０５】
書き込み制御部３１４Ｄは、第１〜第３データを結合することで第１のデータファイルを再現する。
【０３０６】
ここで、書き込み制御部３１４Ｄは、第３のデータの受信を開始することで、第１のデータまたは第２のデータの受信速度が遅くなった場合、第３のデータの受信を停止させても良い。
【０３０７】
第３の実施形態の変形例４では、第１の送信要求はデータファイル全体に対する送信要求である。また、第２のデータ送信要求と第３のデータ送信要求は、それぞれフ７５０バイト目からデータファイルの終点までと、５００バイト目から７４９バイト目までを範囲としている。第３のデータ送信要求及び第２のデータ送信要求が全データを取得している間に、第１の送信要求が４９９バイト目まで取得すれば、データファイル全体の取得が完了することになる。一方、第３のデータ送信要求を開始した後に、第３のデータ送信要求に対する受信を中止した場合に、第１の送信要求に対する応答により、第２のデータ送信要求で取得を開始した位置まで継続して受信すれば、不要なリクエストを出さずに第３のデータ送信要求で未取得な部分の受信を続けることができる。ここで、第３のデータ送信要求に対する受信を中断した場合、第３のデータ送信要求で指定した範囲については、取得済の部分と未取得の部分が混在することになる。第１の送信要求に対するデータ受信において、第３のデータ送信要求により受信済の部分と重なった場合に、第１の送信要求に対する受信を一旦中断させ、第３のデータ送信要求により未受信の部分から受信を再開してもよい。また、第３のデータ送信要求で受信済の部分も継続して受信してもよい。第３のデータ送信要求で受信済みの部分も継続して取得すれば、ＨＴＴＰコネクションを中断し再開するオーバーヘッドを減らすことができる。
【０３０８】
第３の実施形態の変形例４では、ある送信要求のデータの受信範囲が、別の送信要求のデータの受信範囲の開始地点に到達するまでは受信を続ける前提であった。しかしながら、ある送信要求のデータの受信範囲が、別の送信要求の受信範囲の開始点に到達する前に、途中で受信を終了してもよい。例えば、アプリケーションの都合や何らかのデータ境界を検出した場合である。また、いったん受信を終了あるいは中断した後，あとから受信を再開してもよい。
【０３０９】
第３の実施形態の変形例４の通信装置３１０Ｄによれば、ある１つのデータファイルに対して、第１のデータ及び第２のデータ送信要求を送信後、第１のデータまたは第２のデータの受信中に、第３のデータ送信要求を追加で要求できるため、データファイル内のデータを効率的に取得することができる。また、第３の実施形態の変形例４の通信装置３１０Ｄは、第２のデータ送信要求や第３のデータ送信要求の取得範囲は，データファイル末尾側の範囲から指定しているため、途中で中断した場合にも、第１の送信要求の応答により、第３のデータ送信要求や第２のデータ送信要求で未受信部分のデータを受信することができる。
【０３１０】
以上説明した少なくとも１つの実施形態の効果は、データファイルに対して、複数の範囲のデータの送信要求、又は受信要求を並列に実行する場合に、データファイル内のデータをより効率的に取得又は送出することを実現でことである。
【０３１１】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０３１２】
１１０、１１０Ｂ、１２０Ｄ、２１０、２１０Ｂ、２２０Ｄ、３１０・・・通信装置、１１１、１１１Ｂ、１１１Ｄ、２１１、２１１Ｂ、２１１Ｄ、３１１・・・指定部、１１２、１１２Ｂ、１１２Ｄ、２１２、２１２Ｂ、２１２Ｄ、３１２・・要求送信部、１１３、１１３Ｂ、１１３Ｄ、２２２、２２２Ｂ、２２２Ｄ、３１３…データ受信部、１１４、１１４Ｂ、１１４Ｄ、２２３、２２３Ｂ，２２３Ｄ、３１４・・・書き込み制御部、１１５、１１５Ｂ、１１５Ｄ、２２４２２４Ｂ、２２４Ｄ、３１５、・・・記憶部、１２０、１２０Ｂ、１１０Ｄ、２２０、２２０Ｂ，２１０Ｄ、３２０…サーバ、１２１、１２１Ｂ、１２１Ｄ、２２１、２２１Ｂ、２２１Ｄ、３２１・・・要求受信部、１２２、１２２Ｂ、１２２Ｄ、２１３、２１３Ｂ、２１３Ｄ、３２２・・・データ送信部、１２３、１２３Ｂ、１２３Ｄ、２１４、２１４Ｂ、２１４Ｄ、３２３・・・読み込み制御部、１２４、１２４Ｂ、１２４Ｄ、２１５、２１５Ｂ，２１５Ｄ、３２４・・・記憶部、１２５Ｂ、１２５Ｄ、２１６Ｂ、２１６Ｄ・・・反転部、１３０・・・ネットワーク。
【図１】
2015172812.tif 000003
【図２】
2015172812.tif 000004
【図３】
2015172812.tif 000005
【図４】
2015172812.tif 000006
【図５】
2015172812.tif 000007
【図６】
2015172812.tif 000008
【図７】
2015172812.tif 000009
【図８】
2015172812.tif 000010
【図９】
2015172812.tif 000011
【図１０】
2015172812.tif 000012
【図１１】
2015172812.tif 000013
【図１２】
2015172812.tif 000014
【図１３】
2015172812.tif 000015
【図１４】
2015172812.tif 000016
【図１５】
2015172812.tif 000017
【図１６】
2015172812.tif 000018
【図１７】
2015172812.tif 000019
【図１８】
2015172812.tif 000020
【図１９】
2015172812.tif 000021
【図２０】
2015172812.tif 000022
【図２１】
2015172812.tif 000023
【図２２】
2015172812.tif 000024
【図２３】
2015172812.tif 000025
【図２４】
2015172812.tif 000026
【図２５】
2015172812.tif 000027
【図２６】
2015172812.tif 000028
【図２７】
2015172812.tif 000029
【図２８】
2015172812.tif 000030
【図２９】
2015172812.tif 000031