Package htsjdk.samtools.seekablestream

# Class SeekableStream

java.lang.Object
java.io.InputStream
htsjdk.samtools.seekablestream.SeekableStream

All Implemented Interfaces:
  `Closeable`, `AutoCloseable`

Direct Known Subclasses:
  `ByteArraySeekableStream`, `SeekableBufferedStream`, `SeekableFileStream`, `SeekableFTPStream`, `SeekableHTTPStream`, `SeekableMemoryStream`, `SeekablePathStream`

public abstract class SeekableStream extends InputStream
InputStream with random access support (seek).

`SeekableStream` provides an interface for random access support in `InputStream`, thought the implementation of `seek(long)`. As a random access stream, it supports mark by design, being able to seek to a concrete position.

## Field Summary

Fields
Modifier and Type
Field
Description
`protected OptionalLong`
`mark`
If the stream is marked with `mark(int)` this represents the `position()` where the stream was; otherwise, this is empty.

## Constructor Summary

Constructors
Constructor
Description
`SeekableStream()`

## Method Summary

Modifier and Type
Method
Description
`int`
`available()`
The return value of this method is unusable for any purpose, and we are only implementing it because certain Java classes like `GZIPInputStream` incorrectly rely on it to detect EOF
`abstract void`
`close()`
`abstract boolean`
`eof()`
`abstract String`
`getSource()`
`abstract long`
`length()`
`final void`
`mark(int readlimit)`
Mark the current position of the stream.
`final boolean`
`markSupported()`
Mark is always supported by any `SeekableStream`.
`abstract long`
`position()`
`abstract int`
`read(byte[] buffer, int offset, int length)`
`void`
`readFully(byte[] b)`
Read enough bytes to fill the input buffer.
`void`
`reset()`
Seeks to the marked position if set; otherwise to the beginning of the stream.
`abstract void`
`seek(long position)`
Seeks the stream to the provided position.

### Methods inherited from class java.io.InputStream

`nullInputStream, read, read, readAllBytes, readNBytes, readNBytes, skip, skipNBytes, transferTo`

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

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### mark

protected OptionalLong mark
If the stream is marked with `mark(int)` this represents the `position()` where the stream was; otherwise, this is empty.

## Constructor Details

### SeekableStream

public SeekableStream()

## Method Details

### length

public abstract long length()

Returns:
  the length of the stream; 0 if not available or empty.

### position

public abstract long position() throws IOException

Returns:
  the current byte position of the stream.
Throws:
  `IOException`

### seek

public abstract void seek(long position) throws IOException
Seeks the stream to the provided position.

Throws:
  `IOException`

### read

public abstract int read(byte[] buffer, int offset, int length) throws IOException

Overrides:
  `read` in class `InputStream`
Throws:
  `IOException`

### close

public abstract void close() throws IOException

Specified by:
  `close` in interface `AutoCloseable`
Specified by:
  `close` in interface `Closeable`
Overrides:
  `close` in class `InputStream`
Throws:
  `IOException`

### eof

public abstract boolean eof() throws IOException

Returns:
  `true` if the stream is already consumed; `false` otherwise.
Throws:
  `IOException`

### getSource

public abstract String getSource()

Returns:
  String representation of source (e.g. URL, file path, etc.), or null if not available.

### readFully

public void readFully(byte[] b) throws IOException
Read enough bytes to fill the input buffer.

Parameters:
  `b` -
Throws:
  `EOFException` - If EOF is reached before buffer is filled
  `IOException`

### available

public int available() throws IOException
The return value of this method is unusable for any purpose, and we are only implementing it because certain Java classes like `GZIPInputStream` incorrectly rely on it to detect EOF

If `eof() == true`, 0 bytes are available. Otherwise, available bytes are the difference between the length of the stream (`length()`) and the current position (`position()`.

Overrides:
  `available` in class `InputStream`
Returns:
  `0` if the end of the file has been reached or the length cannot be determined; number of bytes remaining in the stream otherwise.
Throws:
  `IOException`

### mark

public final void mark(int readlimit)
Mark the current position of the stream.

Note: there is no limit for reading.

Overrides:
  `mark` in class `InputStream`
Parameters:
  `readlimit` - ignored.
Throws:
  `RuntimeIOException` - if an IO error occurs other than an already closed stream.

### reset

public void reset() throws IOException
Seeks to the marked position if set; otherwise to the beginning of the stream.

Overrides:
  `reset` in class `InputStream`
Throws:
  `IOException`

### markSupported

public final boolean markSupported()
Mark is always supported by any `SeekableStream`.

Overrides:
  `markSupported` in class `InputStream`