- すべてのスーパー・インタフェース:
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
- 関連項目:
-
メソッドのサマリー
修飾子と型メソッド説明void
close()
モジュール・リーダーを閉じます。リソースを検索し、モジュール内のリソースにURIを返します。list()
モジュールの内容を一覧表示し、モジュール内のすべてのリソースの名前である要素のストリームを返します。default Optional
<InputStream> リソースを開き、モジュール内のリソースを読み取るための入力ストリームを返します。default Optional
<ByteBuffer> リソースを読み取り、リソースの内容を含むバイト・バッファを返します。default void
release
(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
- 入出力エラーが発生した場合
-