public interface MultiDoc
MultiDocインタフェースは、docの「リンク・リスト」に類似した抽出を提供します。multidocオブジェクトは、リンク・リスト内のノードに似ており、リスト内の現行docおよびリスト内の次のノード(multidoc)へのポインタを含みます。Print JobはmultidocのgetDoc()
メソッドを呼び出して、現行のdocを取得できます。次のdocに進む準備ができたら、Print Jobはmultidocのnext()
メソッドを呼び出して、次のmultidoc (次のdocを含む)を取得できます。このため、multidocへのアクセスを実行するPrint Jobコードは、次のようになります。
void processMultiDoc(MultiDoc theMultiDoc) { MultiDoc current = theMultiDoc; while (current != null) { processDoc (current.getDoc()); current = current.next(); } }
MultiDocインタフェースは、規約に従って実装できます。実装内でリンク・リストを使用しなくてもかまいません。
multidoc印刷ジョブの印刷データすべてを取得する場合、Print Serviceプロキシは次の2つのパターンのどれかを使用できます。
この問題に対処し、クライアントの設計を簡略化してPrint Jobに複数のdocを提供するため、multidoc印刷ジョブをサポートするPrint Serviceプロキシはすべて、インターリーブ化パターンを使用してMultiDocオブジェクトにアクセスする必要があります。つまり、MultiDocオブジェクトが指定されると、印刷サービス・プロキシは、現行のDocオブジェクトの取得に成功するまで、getDoc()
を1回または複数回呼び出します。印刷サービス・プロキシは、次に現行docの印刷データを取得しますが、すべての印刷データを取得するか、回復不可能なエラーが発生するまで次の作業に進みません。作業を続行可能な場合、印刷サービス・プロキシは、次のMultiDocオブジェクトまたはこれ以上オブジェクトが存在しないという指示を取得するまで、next()
を1回または複数回呼び出します。MultiDocインタフェースの実装により、印刷サービス・プロキシがこのインターリーブ化パターンに従うものとみなすことができます。その他の使用パターンの場合、MultiDoc実装の動作は保証されません。
1つのmultidocに同時にアクセス可能なクライアント・スレッドの数に制限はありません。このため、MultiDocインタフェースの実装はすべて、複数のスレッドに対して安全に設計する必要があります。実際、Print Jobスレッドが(概念上の)リストの先頭からdocを取得中に、クライアント・スレッドがリストの最後にdocを追加することがあり得ます。multidocオブジェクトが複数のスレッドを適正に同期させるのであれば、2つのスレッドが相互に干渉することはありません。
Doc getDoc() throws IOException
IOException
- ドキュメントの読込み中にエラーが発生した場合にスローされる。MultiDoc next() throws IOException
IOException
- 次のドキュメントの検出中にエラーが発生した場合にスローされる。 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.