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

インタフェースModuleReader

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

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

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

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

    ModuleReaderは作成時にオープンされ、closeメソッドを呼び出してクローズされます。 モジュール・リーダーのクローズに失敗すると、リソース・リークが発生する可能性があります。 try-with-resources文は、モジュール・リーダーを閉じるために役立つ構造を提供します。

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

    実装要件:
    ModuleReaderの実装では、抽象リソース名をパッケージ・モジュールまたはファイル・システム上のリソースの場所に変換する際に十分に注意する必要があります。 実装では、リソース名を'.、'..'、ファイル・セパレータを含む要素、または空の要素などの要素で"not found"として処理することをお薦めします。 より一般的には、listメソッドが返す要素のストリームにリソース名がない場合、リソースの不整合を回避するために、リソースは「見つかりません」として扱われる必要があります。
    導入されたバージョン:
    9
    関連項目:
    ModuleReference
    • メソッドの詳細

      • 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)
        バイト・バッファを解放します。 このメソッドは、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 - 入出力エラーが発生した場合