モジュール java.base
パッケージ java.lang.module

インタフェースModuleReader

すべてのスーパー・インタフェース:
AutoCloseable, Closeable

public interface ModuleReader extends Closeable
モジュールのコンテンツへのアクセスを提供します。

モジュール・リーダーは、モジュールがロードされているかどうかに関係なく、モジュール内のリソースへのアクセスが必要な場合に使用します。 たとえば、ファイル・システム上のパッケージ化されたモジュールのコレクションをスキャンするフレームワークは、モジュール・リーダーを使用して各モジュール内の特定のリソースにアクセスすることができます。 モジュール・リーダーは、モジュールからクラスおよびリソースをロードするClassLoader実装によっても使用されることを意図しています。

モジュール内のリソースは、'/'で区切られたパス文字列である抽象名で識別されます。 たとえば、モジュールjava.baseは、java.lang.Objectのクラス・ファイルであるリソース"java/lang/Object.class"を持つことができます。 モジュール・リーダーは、モジュール・コンテンツのディレクトリをリソース(モジュール・リーダー固有かどうか)として扱います。 モジュールの内容にリソースとして配置できるディレクトリがある場合、その名前はスラッシュ('/')で終わります。 ディレクトリは、末尾のスラッシュを削除する名前で検索することもできます。

ModuleReaderは作成時にopenであり、closeメソッドを呼び出すことによって閉じられます。 モジュール・リーダーを閉じないと、リソースがリークする可能性があります。 try-with-resources文は、モジュール・リーダーが閉じられるようにするための便利な構成を提供します。

ModuleReaderの実装では、モジュール内のリソースにアクセスするためのアクセス権が必要な場合があります。 したがって、セキュリティ・マネージャによってアクセスが拒否された場合、findopenread、およびlistメソッドは SecurityExceptionをスローする可能性があります。

実装要件:
ModuleReaderの実装は、抽象的なリソース名を、パッケージ化されたモジュールまたはファイル・システムのリソースのロケーションに変換するときには、細心の注意が必要です。 実装では、リソース名を'.,' .. 'などの要素、ファイル区切り文字を含む要素、または"見つかりません"などの空要素で処理することをお勧めします。 より一般的には、listメソッドが返す要素のストリームにリソース名が含まれていない場合、矛盾を避けるためにリソースを"見つかりません"として扱う必要があります。
導入されたバージョン:
9
関連項目:
ModuleReference
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    void
    モジュール・リーダーを閉じます。
    find​(String name)
    リソースを検索し、モジュール内のリソースにURIを返します。
    モジュールの内容をリストし、モジュール内のすべてのリソースの名前である要素のストリームを返します。
    open​(String name)
    リソースをオープンし、モジュール内のリソースを読み取る入力ストリームを返します。
    read​(String name)
    リソースを読み込み、リソースの内容を含むバイト・バッファを返します。
    default void
    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がスローされることがあります。 これが起こると、IOExceptionUncheckedIOExceptionにラップされ、アクセスを試みたメソッドからスローされます。 SecurityExceptionは、ストリームを使用してモジュールの内容をリストし、セキュリティ・マネージャによってアクセスが拒否されたときにスローされることもあります。

      モジュール・リーダーが閉じられた後にストリームが使用されるときの動作は実装固有であり、したがって指定されていません。

      戻り値:
      モジュール内のすべてのリソースの名前である要素のストリーム
      例外:
      IOException - I/Oエラーが発生した場合、またはモジュール・リーダーが閉じている場合
      SecurityException - セキュリティ・マネージャによって拒否された場合
    • close

      void close() throws IOException
      モジュール・リーダーを閉じます。 一旦閉じられると、IOExceptionを投げることによって、リソースを見つけたり読んだりする後続の呼び出しが失敗します。

      モジュール・リーダーは非同期に閉じる必要はありません。 スレッドがリソースを読み取っていて、別のスレッドがcloseメソッドを呼び出すと、読み取り操作が完了するまで、2番目のスレッドがブロックされることがあります。

      定義:
      close、インタフェース: AutoCloseable
      定義:
      close、インタフェース: Closeable
      例外:
      IOException - 入出力エラーが発生した場合