A module reader is intended for cases where access to the resources in a
module is required, regardless of whether the module has been loaded.
A framework that scans a collection of packaged modules on the file system,
for example, may use a module reader to access a specific resource in each
module. A module reader is also intended to be used by ClassLoader
implementations that load classes and resources from modules.
A resource in a module is identified by an abstract name that is a
'/'-separated path string. For example, module java.base may
have a resource "java/lang/Object.class" that, by convention, is the
class file for java.lang.Object. A module reader may treat
directories in the module content as resources (whether it does or not is
module reader specific). Where the module content contains a directory
that can be located as a resource then its name ends with a slash ('/'). The
directory can also be located with a name that drops the trailing slash.
A ModuleReader is open upon
creation and is closed by invoking the close method. Failure
to close a module reader may result in a resource leak. The try-with-resources statement provides a useful construct to ensure that
module readers are closed.
Implementation Specification
Implementations of ModuleReader should take great care
when translating an abstract resource name to the location of a resource in
a packaged module or on the file system. Implementations are advised to
treat resource names with elements such as '., '..',
elements containing file separators, or empty elements as "not found". More
generally, if the resource name is not in the stream of elements that the
list method returns then the resource should be treated as "not
found" to avoid inconsistencies.
ModuleReference
| Modifier and Type | Method and Description |
|---|---|
| public void | |
| public Optional | |
| public Stream | Returns: A stream of elements that are the names of all resources in the moduleLists the contents of the module, returning a stream of elements that are the names of all resources in the module. |
| public default Optional | |
| public default Optional | |
| public default void |
| close | back to summary |
|---|---|
| public void close() throws IOException Redeclares java. Closes the module reader. Once closed then subsequent calls to locate or
read a resource will fail by throwing A module reader is not required to be asynchronously closeable. If a thread is reading a resource and another thread invokes the close method, then the second thread may block until the read operation is complete.
| |
| find | back to summary |
|---|---|
| public Optional Finds a resource, returning a URI to the resource in the module. If the module reader can determine that the name locates a directory then the resulting URI will end with a slash ('/').
| |
| list | back to summary |
|---|---|
| public Stream Lists the contents of the module, returning a stream of elements that are the names of all resources in the module. Whether the stream of elements includes names corresponding to directories in the module is module reader specific. In lazy implementations then an The returned stream may contain references to one or more open directories in the module. The directories are closed by closing the stream. The behavior of the stream when used after the module reader is closed is implementation specific and therefore not specified. API Note This method should be used within a try-with-resources statement or similar control structure to ensure that any open directories referenced by the stream are closed promptly after the stream's operations have completed.
| |
| open | back to summary |
|---|---|
| public default Optional Opens a resource, returning an input stream to read the resource in the module. The behavior of the input stream when used after the module reader is closed is implementation specific and therefore not specified. Implementation Specification The default implementation invokes the
| |
| read | back to summary |
|---|---|
| public default Optional Reads a resource, returning a byte buffer with the contents of the
resource.
The element at the returned buffer's position is the first byte of the
resource, the element at the buffer's limit is the last byte of the
resource. Once consumed, the API Note This method is intended for high-performance class loading. It
is not capable (or intended) to read arbitrary large resources that
could potentially be 2GB or larger. The rationale for using this method
in conjunction with the Implementation Specification The default implementation invokes the
| |
| release | back to summary |
|---|---|
| public default void release(ByteBuffer bb) Releases a byte buffer. This method should be invoked after consuming
the contents of the buffer returned by the Implementation Specification The default implementation doesn't do anything except check if the byte buffer is null.
| |