Package htsjdk.beta.io.bundle

# Class SeekableStreamResource

java.lang.Object
htsjdk.beta.io.bundle.BundleResourceBase
htsjdk.beta.io.bundle.InputStreamResource
htsjdk.beta.io.bundle.SeekableStreamResource

All Implemented Interfaces:
  `BundleResource`, `Serializable`

public class SeekableStreamResource extends InputStreamResource
A `BundleResource` backed by a `SeekableStream`.

See Also:
  - Serialized Form

## Constructor Summary

Constructors
Constructor
Description
`SeekableStreamResource(SeekableStream seekableStream, String displayName, String contentType)`
Create a `BundleResource` backed by an SeekableStream, specifying a display name and content type.
`SeekableStreamResource(SeekableStream seekableStream, String displayName, String contentType, String format)`
Create a `BundleResource` backed by an SeekableStream, specifying a display name, content type and format.

## Method Summary

Modifier and Type
Method
Description
`boolean`
`equals(Object o)`
`Optional<InputStream>`
`getInputStream()`
Get the `SeekableStream` managed by this resource as an `InputStream`.
`Optional<SeekableStream>`
`getSeekableStream()`
Get a `SeekableStream` for this resource, or Optional.empty.
`SignatureStream`
`getSignatureStream(int signatureProbeLength)`
Get a `SignatureStream` for this resource.
`int`
`hashCode()`
`boolean`
`hasInputType()`
Return true if is this resource is backed by a type that can be used for input.
`boolean`
`hasSeekableStream()`
Returns true if this resource can be rendered as a `SeekableStream`.
`String`
`toString()`

### Methods inherited from class htsjdk.beta.io.bundle.BundleResourceBase

`getContentType, getDisplayName, getFileFormat, getIOPath, getOutputStream, hasOutputType`

### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

## Constructor Details

### SeekableStreamResource

public SeekableStreamResource(SeekableStream seekableStream, String displayName, String contentType)
Create a `BundleResource` backed by an SeekableStream, specifying a display name and content type.

Parameters:
  `seekableStream` - The `SeekableStream` to use for this resource. May not be null.
  `displayName` - The display name for this resource. May not be null or 0-length.
  `contentType` - The content type for this resource. May not be null or 0-length.

### SeekableStreamResource

public SeekableStreamResource(SeekableStream seekableStream, String displayName, String contentType, String format)
Create a `BundleResource` backed by an SeekableStream, specifying a display name, content type and format.

Parameters:
  `seekableStream` - The `SeekableStream` to use for this resource. May not be null.
  `displayName` - The display name for this resource. May not be null or 0-length.
  `contentType` - The content type for this resource. May not be null or 0-length.
  `format` - The format for this resource. May not be null or 0-length.

## Method Details

### getInputStream

public Optional<InputStream> getInputStream()
Get the `SeekableStream` managed by this resource as an `InputStream`. Does not alter or reset the underlying stream.

Specified by:
  `getInputStream` in interface `BundleResource`
Overrides:
  `getInputStream` in class `InputStreamResource`
Returns:
  the seekable stream managed by this resource, without resetting the stream's state

### getSeekableStream

public Optional<SeekableStream> getSeekableStream()
Description copied from interface: `BundleResource`
Get a `SeekableStream` for this resource, or Optional.empty.

Specified by:
  `getSeekableStream` in interface `BundleResource`
Overrides:
  `getSeekableStream` in class `BundleResourceBase`
Returns:
  an `SeekableStream` for this resource, or Optional.empty if this is not an input type (see `BundleResource.hasInputType()`), or is an input type for which no `SeekableStream` can be obtained (see `BundleResource.hasSeekableStream()`).

### getSignatureStream

public SignatureStream getSignatureStream(int signatureProbeLength)
Get a `SignatureStream` for this resource. This method requires access to the first `signatureProbeLength` bytes of the underlying resource. `BundleResource` implementations that are backed by raw streams that can only be consumed once, such as `InputStreamResource`, may consume and buffer a portion of the underlying resource's stream in order to allow subsequent callers of the `BundleResource.getInputStream()`) method to be presented with the entire stream, including the signature. Calls to this method may have the side effect of changing or resetting the current position of the underlying stream; serial calls to `BundleResource.getSignatureStream(int)` on the same object are not necessarily idempotent; and implementations are free to throw to prevent serial calls to this method.

Specified by:
  `getSignatureStream` in interface `BundleResource`
Overrides:
  `getSignatureStream` in class `InputStreamResource`
Parameters:
  `signatureProbeLength` - the number of bytes of the underlying resource to include in the `SignatureStream` stream. `signatureProbeLength` should be expressed in "compressed(/encrypted)" space rather than "plaintext" space. For example, a file format signature may consist of `n` bytes of ASCII, but for formats that use compressed streams, the codec may need access to an entire compressed block in order to inspect those `n` bytes. `signatureProbeLength` should use the compressed block size, in order to ensure that the `SignatureStream` contains a semantically meaningful fragment of the underlying input.
Returns:
  Get a SignatureProbeStream on this resource. Resets the underlying seekable stream.

### hasInputType

public boolean hasInputType()
Description copied from interface: `BundleResource`
Return true if is this resource is backed by a type that can be used for input. Some resource types, such as `InputStreamResource`, can be used for input but not for output (see `BundleResource.hasOutputType()`. Others, such as `OutputStreamResource`, can be used for output but not for input. Some resource types may be suitable for both (for example see `IOPathResource`).

The determination is based only on the type of the resource, and does not imply a guarantee about whether the resource type is actually readable.

Specified by:
  `hasInputType` in interface `BundleResource`
Overrides:
  `hasInputType` in class `InputStreamResource`
Returns:
  true if the type of this resource makes it suitable for use as a source of input.

### hasSeekableStream

public boolean hasSeekableStream()
Description copied from interface: `BundleResource`
Returns true if this resource can be rendered as a `SeekableStream`.

Specified by:
  `hasSeekableStream` in interface `BundleResource`
Overrides:
  `hasSeekableStream` in class `BundleResourceBase`
Returns:
  true if this resource can be rendered as a `SeekableStream` (see `BundleResource.getSeekableStream()`)

### equals

public boolean equals(Object o)

Overrides:
  `equals` in class `InputStreamResource`

### hashCode

public int hashCode()

Overrides:
  `hashCode` in class `InputStreamResource`

### toString

public String toString()

Overrides:
  `toString` in class `InputStreamResource`