- すべてのスーパー・インタフェース:
AutoCloseable
,Closeable
public interface ModuleReader extends 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
- 関連項目:
ModuleReference
-
メソッドのサマリー
修飾子と型 メソッド 説明 void
close()
モジュール・リーダーを閉じます。Optional<URI>
find(String name)
リソースを検索し、モジュール内のリソースにURIを返します。Stream<String>
list()
モジュールの内容をリストし、モジュール内のすべてのリソースの名前である要素のストリームを返します。default Optional<InputStream>
open(String name)
リソースをオープンし、モジュール内のリソースを読み取る入力ストリームを返します。default Optional<ByteBuffer>
read(String name)
リソースを読み込み、リソースの内容を含むバイト・バッファを返します。default void
release(ByteBuffer bb)
Byteバッファを解放します。
-
メソッドの詳細
-
find
Optional<URI> find(String name) throws IOExceptionリソースを検索し、モジュール内のリソースにURIを返します。モジュール・リーダーが名前がディレクトリを見つけたと判断できる場合、結果のURIはスラッシュ('/')で終わります。
- パラメータ:
name
- 読書のために開くリソースの名前- 戻り値:
- リソースへのURI。リソースが見つからない場合、またはURIを構築してリソースを見つけることができない場合は空の
Optional
- 例外:
IOException
- I/Oエラーが発生した場合、またはモジュール・リーダーが閉じている場合SecurityException
- セキュリティ・マネージャによって拒否された場合- 関連項目:
ClassLoader.getResource(String)
-
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
より大きい場合、バイト・バッファの最大容量- 関連項目:
ClassLoader.defineClass(String, ByteBuffer, java.security.ProtectionDomain)
-
release
default void release(ByteBuffer bb)Byteバッファを解放します。 このメソッドは、read
メソッドによって返されたバッファの内容を消費した後に呼び出す必要があります。 既に解放されているバッファを解放するために呼び出されたときのこのメソッドの振る舞い、またはModuleReader
が閉じられた後にバッファを解放するために呼び出されたときの振る舞いは実装固有であり、したがって指定されていません。- 実装要件:
- デフォルトの実装では、バイト・バッファがnullであるかどうかのチェック以外は何も行いません。
- パラメータ:
bb
- 解放するバイト・バッファ
-
list
Stream<String> list() throws IOExceptionモジュールの内容をリストし、モジュール内のすべてのリソースの名前である要素のストリームを返します。 要素のストリームにモジュール内のディレクトリに対応する名前が含まれているかどうかは、モジュール・リーダー固有です。遅延実装では、ストリームを使用してモジュールの内容をリストするときに
IOException
がスローされることがあります。 これが起こると、IOException
はUncheckedIOException
にラップされ、アクセスを試みたメソッドからスローされます。SecurityException
は、ストリームを使用してモジュールの内容をリストし、セキュリティ・マネージャによってアクセスが拒否されたときにスローされることもあります。モジュール・リーダーが閉じられた後にストリームが使用されるときの動作は実装固有であり、したがって指定されていません。
- 戻り値:
- モジュール内のすべてのリソースの名前である要素のストリーム
- 例外:
IOException
- I/Oエラーが発生した場合、またはモジュール・リーダーが閉じている場合SecurityException
- セキュリティ・マネージャによって拒否された場合
-
close
void close() throws IOExceptionモジュール・リーダーを閉じます。 一旦閉じられると、IOException
を投げることによって、リソースを見つけたり読んだりする後続の呼び出しが失敗します。モジュール・リーダーは非同期に閉じる必要はありません。 スレッドがリソースを読み取っていて、別のスレッドがcloseメソッドを呼び出すと、読み取り操作が完了するまで、2番目のスレッドがブロックされることがあります。
- 定義:
close
、インタフェース:AutoCloseable
- 定義:
close
、インタフェース:Closeable
- 例外:
IOException
- 入出力エラーが発生した場合
-