(57)【要約】【課題】連続したデータを断片化し、並び替えることによって別の形式のデータを生成する際に、変換前のデータの取得と変換、送受信を並行して行えるようにする。【解決手段】変換前のデータ１は、ストリームによってアクセス可能な記憶装置または通信装置から取得できる。装置３はデータ１を先頭から順に処理し、データ２のうち、生成可能な断片を逐次生成する。装置３は装置４に生成されたデータと、そのデータが属する断片を同定する情報と、データ２内での断片の順序関係を表す情報を送る。装置４は受信したデータをデータ２の所定の断片に逐次添加し、断片を所定の順序に並べる。【選択図】図１
2005310083.tif 000002
【特許請求の範囲】
【請求項１】
ストリームから変換前のデータを逐次取得して任意のデータ形式に変換し、変換が終わった部分から、任意の通信方法を用いて逐次送信し受信側で受信する処理を並行して行うことができ、逐次送信されるデータが変換後のデータ中の任意の断片に属することができることを特徴とするデータ変換装置のインターフェース。
【請求項２】
請求項１のデータ変換装置と受信側を全二重通信で接続し、変換前のデータを受信側から逐次送信し、データ変換装置で受信して変換後のデータを受信側に逐次送信するデータ変換装置のインターフェース。
【発明の詳細な説明】
【技術分野】
【０００１】本発明は、与えられたデータを他のデータ形式に変換するデータ変換装置のインターフェースに関するものである。
【背景技術】
【０００２】従来のデータ変換装置（非特許文献１参照）では、他の装置が変換後のデータを取得する手段として、ストリームまたはファイルからそのままデータを取得するものがある。
【非特許文献１】「米国サンマイクロシステムズ社、ＪＩＭＩ」ウェブ上のアドレス「ｈｔｔｐ：／／ｊａｖａ．ｓｕｎ．ｃｏｍ／ｐｒｏｄｕｃｔｓ／ｊｉｍｉ／」で公開されている「ＪＩＭＩ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｍｅｎｔ  Ｋｉｔ」の「ＪＩＭＩ＿ｔｅｃｈｎｉｃａｌ．ｈｔｍｌ」
【発明の開示】
【発明が解決しようとする課題】
【０００３】変換後のデータの取得方法としてストリームまたはファイルをそのまま用いるデータ変換装置では、最悪の場合、データの変換が完了するまで変換後のデータの一部さえも取得できないという問題があった。例えば、このデータ変換装置がデータを変換する場合、変換後のデータの先頭を生成するために変換前のデータの末尾が必要な場合、データ変換装置は変換前のデータを全て読み込むまで、変換後のデータの送信を開始できない。これは、ストリームでは先頭から順にデータを取り出すことしかできないという制約によるものである。【０００４】また、ファイルを用いる場合は、一般にファイルの生成が完了するまで他のプログラムはファイルにアクセスできないため、データの変換と並行して変換後のデータを逐次取得することは不可能である。【０００５】本発明は、ストリームによってデータ変換装置に与えられたデータを逐次変換し、変換が終わった部分から変換後のデータを他の装置が並行して取得できるようにするものである。
【課題を解決するための手段】
【０００６】図１に示すようにデータ変換装置３は、受信側４に電子回路、ストリームあるいはパケット通信装置を使って変換後のデータを送信する。【０００７】本発明では、受信側で再結合することを前提として、データ２の先頭のデータが未送信の状態で、データ２の途中のデータを受信側４に送信することができる。以下にその手段を説明する。
（１）装置３が受信側４にデータ２の一部を新たに送り出す前に、それが所属するデータ２内の１つの連続する断片を同定できる一意の記号（ＩＤ）と、その断片のデータ２内での位置関係を表す情報を同時に受信側４に送信する。
（２）その後データ２の一部を送るときは、装置３は断片ＩＤとデータを組にして送る。
（３）ある断片に対して最初に装置３からデータが送られた場合、受信側４はランダムアクセス可能な記憶装置の別々の領域に断片ごとのデータを作成する。
（４）続いてデータが送られた場合は、ＩＤに対応する断片の末尾に装置３から送られたデータを追加する。
断片のデータ２内での位置関係を表す情報とは、現在受信側４で生成されつつあるデータ２の末端に断片を追加するか、あるいは以前にＩＤが生成された断片の直前に挿入するかという情報である。後者の場合、アンカーとなる断片のＩＤが送られる。
データの変換の過程で、新たな断片が必要とされた場合は（１）の操作が行われ、既存の断片の末尾にデータを追加する場合は（２）、（３）、（４）の操作が繰り返される装置３が受信側４にデータ１の変換が完了し、データ２を全て送信した旨を通知した後、受信側４は任意のタイミングで断片化されたデータを順序情報の通りに連続した１つのデータ２に再結合し、記憶装置に格納するか、通信装置を用いて第三の装置に転送する。【０００８】請求項２の構成では、装置３と受信側４の間の接続に全二重通信を用いる。このとき、データ１は受信側４の記憶装置または通信装置から取得され、受信側４から装置３への接続を使って装置３に送られる。前記の手段のうち、データ１を取得するための手段が受信側４から装置３への接続であると見なせば、同様の手段によって実現することができる。
【発明の効果】
【０００９】本発明により、データ変換装置は、データを動的に変換する際に変換前のデータを記憶する記憶領域以外に、データそのものに匹敵する大きさの記憶領域を必要としなくなる。【００１０】また、変換前のデータが全て読み込まれる前に、変換後のデータの生成が開始できるため、最初のデータが生成され始めるまでの時間を短縮できる。【００１１】また、データ変換装置と、変換後のデータを受信する装置を並行して動作させることができるため、単位時間当たりに処理できるデータ量を向上させることができる。
【実施例】
【００１２】例として、図２に示した構成での実装を示す。なお、データの型を表すのに用いるｂｏｏｌｅａｎ，ｂｙｔｅ、ｂｙｔｅ［］、ｉｎｔは、文献１で規定されているＪａｖａ言語のデータ型である。また、メソッドという用語についても、文献１の定義の通りである。【００１３】以下、装置３が通信装置に対して実行可能なメソッドを説明する。
「データ開始」メソッドは、受信側４に対してデータの送信を開始することを通知するものである。このメソッドでは、全２重通信が可能なソケットを使って受信側４に接続し、双方向のストリームによる接続を確立する。装置３から受信側４への接続を以下で説明するメソッドで使用する。
「断片追加」メソッドは、０から開始する連番を使って一意の断片ＩＤ（ｉｎｔ）を生成し、受信側４にデータブロックを送信する。このメソッドは、戻り値として生成された断片ＩＤを返す。データブロックの形式は次の通りである。
９（ｉｎｔ）１（ｂｙｔｅ）断片ＩＤ（ｉｎｔ）−１（ｉｎｔ）
「断片挿入」メソッドは、アンカー断片ＩＤ（ｉｎｔ）を引数に持ち、０から開始する連番を使って一意の断片ＩＤ（ｉｎｔ）を生成し、受信側４にアンカーとなる断片のＩＤを含むデータブロックを送信する。
このメソッドは、戻り値として生成された断片ＩＤを返す。データブロックの形式は次の通りである。
９（ｉｎｔ）１（ｂｙｔｅ）断片ＩＤ（ｉｎｔ）アンカー断片ＩＤ（ｉｎｔ）
「データ送信」メソッドは、断片ＩＤとデータ２の一部を含むバイト配列を引数に持ち、それらを送信するものである。データブロックの形式は次の通りである。
データのバイト数＋５（ｉｎｔ）２（ｂｙｔｅ）断片ＩＤ（ｉｎｔ）データ（ｂｙｔｅ［］）
「データ終了」メソッドは、−１（ｌｏｎｇ）を送信し、データの終了を表す。【００１４】前記の各メソッドは、「データ開始」メソッド以外は装置３がデータ１をデータ２に変換する過程で、必要に応じて実行されるものである。請求項１に該当する場合、装置３はデータ１を記憶装置５から取得する。請求項２に該当する場合、図３に示すように、「データ開始」メソッドで得られた受信側４から装置３へのストリーム接続を用いて、受信側４の記憶装置に格納されているデータ１を取得する。【００１５】以下、受信側４が通信装置に対して実行可能なメソッドを説明する。
「待ち受け」メソッドは、まだ装置３との接続が確立されていない場合は、装置３からの接続があるまで待機し、接続が確立されれば、装置３への双方向のストリーム接続を得て、出力側のストリームを戻り値として返す。既に接続が確立されている場合は単に出力ストリームを返すだけである。
「次のデータの検出」メソッドは、接続が確立されていない場合はｆａｌｓｅを返す。接続が確立されている場合は、受信ストリームからｉｎｔデータを１つ取り出す。データが−１の場合は、戻り値としてｆａｌｓｅを返す。データが−１以外の場合は、続けてその値に８を乗じたビット数だけのデータを取り出す。取り出されたデータの先頭のｂｙｔｅデータをデータタイプとして記憶領域に格納する。データタイプが１の場合は、続くｉｎｔデータ２つをそれぞれ断片ＩＤ、アンカー断片ＩＤとして記憶領域に格納し、戻り値としてｔｒｕｅを返す。データタイプが２の場合は、続くｉｎｔデータを断片ＩＤとして記憶領域に格納し、残りのデータをバイト配列として記憶領域に格納し、ｔｒｕｅを返す。
「データタイプ」メソッドは、「次のデータの検出」メソッドで記憶領域に格納されたデータタイプを戻り値として返す。データタイプが格納されていない場合の戻り値は不定である。
「断片ＩＤ」メソッドは、「次のデータの検出」メソッドで記憶領域に格納された断片ＩＤを戻り値として返す。断片ＩＤが格納されていない場合の戻り値は不定である。
「アンカー断片ＩＤ」メソッドは、「次のデータの検出」メソッドで記憶領域に格納されたアンカー断片ＩＤを戻り値として返す。アンカー断片ＩＤが格納されていない場合の戻り値は不定である。
「データ受信」メソッドは、「次のデータの検出」メソッドで記憶領域に格納されたバイト配列を戻り値として返す。バイト配列が格納されていない場合の戻り値は不定である。【００１６】請求項１に該当する場合、受信側４は「待ち受け」メソッドが返す出力ストリームを使わない。請求項２に該当する場合、受信側４は「待ち受け」メソッドから出力ストリームを得た後、別の制御の流れ（スレッド）に出力ストリームを引き渡す。
スレッドは、出力ストリームにデータ２を送信する。【００１７】続いて、受信側４が上記のインターフェースを利用して行う、データの受信、結合処理について説明する。なお、請求項２に該当する場合は、以下の処理はメインのスレッド（データ２を送信するスレッドとは別のスレッド）で行われる。
（１）受信側４は「待ち受け」メソッドを呼び、装置３の接続があるまで待機する。
（２）次に、「次のデータの検出」メソッドを呼び出す。戻り値がｆａｌｓｅの場合は、（４）の処理を実行する。戻り値がｔｒｕｅの場合は、「データタイプ」メソッドを呼び出す。「データタイプ」メソッドの戻り値が１の場合は「断片ＩＤ」メソッドを呼び出し、戻り値を文字列化した名前の空のファイルをファイルシステムに作成する。続いて「アンカー断片ＩＤ」メソッドを呼び出し、「アンカー断片ＩＤ」メソッドが返した断片の前に「断片ＩＤ」メソッドが返した断片が存在するという情報を記憶領域に書き込む。また、「アンカー断片ＩＤ」メソッドが返した値が−１の場合は、「断片ＩＤ」メソッドが返した断片のＩＤを末端の断片ＩＤとして記憶領域に書き込む。「データタイプメソッドの戻り値が２の場合は「断片ＩＤ」メソッドを呼び出し、戻り値を文字列化した名前のファイルの内容の末尾に「データ受信」メソッドが返したバイト配列を追加する。
（３）「次のデータの検出」メソッドがｆａｌｓｅを返すまで、（２）の処理を繰り返し行う。
（４）この時点で、記憶領域には先頭以外の全ての断片について、断片の直前に存在する断片ＩＤが格納される。
なお、先頭の断片ＩＤは先頭の次の断片の直前の断片ＩＤとして記録され、末端の断片のＩＤは別個に記録されているので、全ての断片の順序関係の情報を得るには十分である。ファイルシステム上にある各断片に対応する断片を順序通りに接続することで、連続した１つのデータ２を再結合することができる。
【参考文献１】
Ｊａｖａ言語規定第２版（日本工業規格標準情報（ＴＲ）ＴＲ  Ｘ０００５：１００２）
【図面の簡単な説明】
【図１】本発明の基本的な構成である。
【図２】本発明の請求項１の実施例の構成である。
【図３】本発明の請求項２の実施例の構成である。
【図１】
2005310083.tif 000003
【図２】
2005310083.tif 000004
【図３】
2005310083.tif 000005