- すべてのスーパー・インタフェース:
AutoCloseable,Closeable
モジュール・リーダーは、モジュールがロードされているかどうかに関係なく、モジュール内のリソースへのアクセスが必要な場合に使用します。 たとえば、ファイル・システム上のパッケージ化されたモジュールのコレクションをスキャンするフレームワークは、モジュール・リーダーを使用して各モジュール内の特定のリソースにアクセスすることができます。 モジュール・リーダーは、モジュールからクラスおよびリソースをロードするClassLoader実装によっても使用されることを意図しています。
モジュール内のリソースは、'/'で区切られたパス文字列である抽象名で識別されます。 たとえば、モジュールjava.baseは、java.lang.Objectのクラス・ファイルであるリソース"java/lang/Object.class"を持つことができます。 モジュール・リーダーは、モジュール・コンテンツのディレクトリをリソース(モジュール・リーダー固有かどうか)として扱います。 モジュールの内容にリソースとして配置できるディレクトリがある場合、その名前はスラッシュ('/')で終わります。 ディレクトリは、末尾のスラッシュを削除する名前で検索することもできます。
ModuleReaderは作成時にopenであり、closeメソッドを呼び出すことによって閉じられます。 モジュール・リーダーを閉じないと、リソースがリークする可能性があります。 try-with-resources文は、モジュール・リーダーが閉じられるようにするための便利な構成を提供します。
ModuleReaderの実装では、モジュール内のリソースにアクセスするためのアクセス権が必要な場合があります。 したがって、セキュリティ・マネージャによってアクセスが拒否された場合、find、open、read、およびlistメソッドは SecurityExceptionをスローする可能性があります。
- 実装要件:
ModuleReaderの実装は、抽象的なリソース名を、パッケージ化されたモジュールまたはファイル・システムのリソースのロケーションに変換するときには、細心の注意が必要です。 実装では、リソース名を'.,'..'などの要素、ファイル区切り文字を含む要素、または"見つかりません"などの空要素で処理することをお勧めします。 より一般的には、listメソッドが返す要素のストリームにリソース名が含まれていない場合、矛盾を避けるためにリソースを"見つかりません"として扱う必要があります。- 導入されたバージョン:
- 9
- 関連項目:
-
メソッドのサマリー
修飾子と型メソッド説明voidclose()モジュール・リーダーを閉じます。リソースを検索し、モジュール内のリソースにURIを返します。list()モジュールの内容をリストし、モジュール内のすべてのリソースの名前である要素のストリームを返します。default Optional<InputStream>リソースをオープンし、モジュール内のリソースを読み取る入力ストリームを返します。default Optional<ByteBuffer>リソースを読み込み、リソースの内容を含むバイト・バッファを返します。default voidrelease(ByteBuffer bb) Byteバッファを解放します。
-
メソッドの詳細
-
find
Optional<URI> find(String name) throws IOException リソースを検索し、モジュール内のリソースにURIを返します。モジュール・リーダーが名前がディレクトリを見つけたと判断できる場合、結果のURIはスラッシュ('/')で終わります。
- パラメータ:
name- 読書のために開くリソースの名前- 戻り値:
- リソースへのURI。リソースが見つからない場合、またはURIを構築してリソースを見つけることができない場合は空の
Optional - 例外:
IOException- I/Oエラーが発生した場合、またはモジュール・リーダーが閉じている場合SecurityException- セキュリティ・マネージャによって拒否された場合- 関連項目:
-
open
default Optional<InputStream> open(String name) throws IOException リソースをオープンし、モジュール内のリソースを読み取る入力ストリームを返します。モジュール・リーダーがクローズされた後に入力ストリームが使用されるときの動作は、実装固有であり、したがって指定されていません。
- 実装要件:
- デフォルトの実装では、
findメソッドが呼び出され、リソースへのURIが取得されます。 見つかった場合は、URLを構築し、リソースへの接続を開始しようとします。 - パラメータ:
name- 読書のために開くリソースの名前- 戻り値:
- リソースを読み取るための入力ストリーム、または見つからなければ空の
Optional - 例外:
IOException- I/Oエラーが発生した場合、またはモジュール・リーダーが閉じている場合SecurityException- セキュリティ・マネージャによって拒否された場合
-
read
default Optional<ByteBuffer> read(String name) throws IOException リソースを読み込み、リソースの内容を含むバイト・バッファを返します。 返されるバッファ位置の要素はリソースの最初のバイトであり、バッファ制限の要素はリソースの最後のバイトです。 消費されたら、releaseメソッドを呼び出さなければなりません。releaseメソッドを呼び出さないと、リソースがリークする可能性があります。- APIのノート:
- このメソッドは、高性能のクラス・ローディングを目的としています。 潜在的に2GB以上の任意の大きなリソースを読み取ることはでき(または意図された)ません。 このメソッドを
releaseメソッドと組み合わせて使用する理由は、モジュール・リーダーの実装でバッファを効率的に管理できるようにすることです。 - 実装要件:
- デフォルトの実装では、
openメソッドが呼び出され、入力ストリームからすべてのバイトがバイト・バッファに読み込まれます。 - パラメータ:
name- 読み取るリソースの名前- 戻り値:
- リソースの内容を含むバイト・バッファ、または見つからなければ空の
Optional - 例外:
IOException- I/Oエラーが発生した場合、またはモジュール・リーダーが閉じている場合SecurityException- セキュリティ・マネージャによって拒否された場合OutOfMemoryError- リソースがInteger.MAX_VALUEより大きい場合、バイト・バッファの最大容量- 関連項目:
-
release
default void release(ByteBuffer bb) Byteバッファを解放します。 このメソッドは、readメソッドによって返されたバッファの内容を消費した後に呼び出す必要があります。 既に解放されているバッファを解放するために呼び出されたときのこのメソッドの振る舞い、またはModuleReaderが閉じられた後にバッファを解放するために呼び出されたときの振る舞いは実装固有であり、したがって指定されていません。- 実装要件:
- デフォルトの実装では、バイト・バッファがnullであるかどうかのチェック以外は何も行いません。
- パラメータ:
bb- 解放するバイト・バッファ
-
list
Stream<String> list() throws IOExceptionモジュールの内容をリストし、モジュール内のすべてのリソースの名前である要素のストリームを返します。 要素のストリームにモジュール内のディレクトリに対応する名前が含まれているかどうかは、モジュール・リーダー固有です。遅延実装では、ストリームを使用してモジュールの内容をリストするときに
IOExceptionがスローされることがあります。 これが起こると、IOExceptionはUncheckedIOExceptionにラップされ、アクセスを試みたメソッドからスローされます。SecurityExceptionは、ストリームを使用してモジュールの内容をリストし、セキュリティ・マネージャによってアクセスが拒否されたときにスローされることもあります。返されるストリームには、モジュール内の1つ以上の開いているディレクトリへの参照が含まれている場合があります。 ディレクトリを閉じるには、ストリームを閉じます。
モジュール・リーダーが閉じられた後にストリームが使用されるときの動作は実装固有であり、したがって指定されていません。
- APIのノート:
- このメソッドはtry-with-resources文または同様の制御構造内で使用して、ストリームによって参照されるオープン・ディレクトリが、ストリームの操作が完了した後にすぐに閉じられるようにする必要があります。
- 戻り値:
- モジュール内のすべてのリソースの名前である要素のストリーム
- 例外:
IOException- I/Oエラーが発生した場合、またはモジュール・リーダーが閉じている場合SecurityException- セキュリティ・マネージャによって拒否された場合
-
close
void close() throws IOExceptionモジュール・リーダーを閉じます。 一旦閉じられると、IOExceptionを投げることによって、リソースを見つけたり読んだりする後続の呼び出しが失敗します。モジュール・リーダーは非同期に閉じる必要はありません。 スレッドがリソースを読み取っていて、別のスレッドがcloseメソッドを呼び出すと、読み取り操作が完了するまで、2番目のスレッドがブロックされることがあります。
- 定義:
close、インタフェースAutoCloseable- 定義:
close、インタフェースCloseable- 例外:
IOException- 入出力エラーが発生した場合
-