Package loci.common
Class StreamHandle
java.lang.Object
loci.common.StreamHandle
- All Implemented Interfaces:
java.io.DataInput
,java.io.DataOutput
,IRandomAccess
- Direct Known Subclasses:
BZip2Handle
,GZipHandle
,S3Handle
,URLHandle
,ZipHandle
public abstract class StreamHandle extends java.lang.Object implements IRandomAccess
Abstract IRandomAccess implementation for reading from InputStreams and
writing to OutputStreams.
- Author:
- Melissa Linkert melissa at glencoesoftware.com
- See Also:
IRandomAccess
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
StreamHandle.Settings
-
Field Summary
Fields Modifier and Type Field Description protected java.lang.String
file
Name of the open stream.protected long
fp
Current position within the stream.protected long
length
Length of the stream.protected long
mark
Marked position within the stream.protected java.nio.ByteOrder
order
Byte ordering of this stream.protected java.io.DataOutputStream
outStream
OutputStream to be used for writing.protected java.io.DataInputStream
stream
InputStream to be used for reading. -
Constructor Summary
Constructors Constructor Description StreamHandle()
Construct a new StreamHandle. -
Method Summary
Modifier and Type Method Description void
close()
Closes this random access stream and releases any system resources associated with the stream.boolean
exists()
Returns whether this refers to a valid objectlong
getFilePointer()
Returns the current offset in this stream.java.nio.ByteOrder
getOrder()
Returns the current order (endianness) of the stream.long
length()
Returns the length of this stream.int
read(byte[] b)
Reads up to b.length bytes of data from this stream into an array of bytes.int
read(byte[] b, int off, int len)
Reads up to len bytes of data from this stream into an array of bytes.int
read(java.nio.ByteBuffer buffer)
Reads up to buffer.capacity() bytes of data from this stream into a ByteBuffer.int
read(java.nio.ByteBuffer buffer, int off, int len)
Reads up to len bytes of data from this stream into a ByteBuffer.boolean
readBoolean()
byte
readByte()
char
readChar()
double
readDouble()
float
readFloat()
void
readFully(byte[] b)
void
readFully(byte[] b, int off, int len)
int
readInt()
java.lang.String
readLine()
long
readLong()
short
readShort()
int
readUnsignedByte()
int
readUnsignedShort()
java.lang.String
readUTF()
protected abstract void
resetStream()
Close and reopen the stream; the stream pointer and mark should be reset to 0.void
seek(long pos)
Sets the stream pointer offset, measured from the beginning of this stream, at which the next read or write occurs.void
setOrder(java.nio.ByteOrder order)
Sets the byte order (endianness) of the stream.int
skipBytes(int n)
long
skipBytes(long n)
Along
variant ofDataInput.skipBytes(int)
.void
write(byte[] b)
void
write(byte[] b, int off, int len)
void
write(int b)
void
write(java.nio.ByteBuffer buf)
Writes up to buffer.capacity() bytes of data from the given ByteBuffer to this stream.void
write(java.nio.ByteBuffer buf, int off, int len)
Writes up to len bytes of data from the given ByteBuffer to this stream.void
writeBoolean(boolean v)
void
writeByte(int v)
void
writeBytes(java.lang.String s)
void
writeChar(int v)
void
writeChars(java.lang.String s)
void
writeDouble(double v)
void
writeFloat(float v)
void
writeInt(int v)
void
writeLong(long v)
void
writeShort(int v)
void
writeUTF(java.lang.String str)
-
Field Details
-
file
protected java.lang.String fileName of the open stream. -
stream
protected java.io.DataInputStream streamInputStream to be used for reading. -
outStream
protected java.io.DataOutputStream outStreamOutputStream to be used for writing. -
length
protected long lengthLength of the stream. -
fp
protected long fpCurrent position within the stream. -
mark
protected long markMarked position within the stream. -
order
protected java.nio.ByteOrder orderByte ordering of this stream.
-
-
Constructor Details
-
StreamHandle
public StreamHandle()Construct a new StreamHandle. The file pointer will be set to 0, and the byte ordering will be big-endian.
-
-
Method Details
-
close
public void close() throws java.io.IOExceptionDescription copied from interface:IRandomAccess
Closes this random access stream and releases any system resources associated with the stream.- Specified by:
close
in interfaceIRandomAccess
- Throws:
java.io.IOException
- if the underlying stream(s) could not be closed
-
getFilePointer
public long getFilePointer() throws java.io.IOExceptionDescription copied from interface:IRandomAccess
Returns the current offset in this stream.- Specified by:
getFilePointer
in interfaceIRandomAccess
- Returns:
- the current byte offset within the file; expected to be non-negative and less than the value of #length()
- Throws:
java.io.IOException
- if the offset cannot be retrieved
-
exists
public boolean exists() throws java.io.IOExceptionDescription copied from interface:IRandomAccess
Returns whether this refers to a valid object- Specified by:
exists
in interfaceIRandomAccess
- Returns:
- true if this refers to a valid object
- Throws:
java.io.IOException
- if unable to determine whether the object is valid
-
length
public long length() throws java.io.IOExceptionDescription copied from interface:IRandomAccess
Returns the length of this stream.- Specified by:
length
in interfaceIRandomAccess
- Returns:
- the length in bytes of the stream
- Throws:
java.io.IOException
- if the length cannot be retrieved
-
read
public int read(byte[] b) throws java.io.IOExceptionDescription copied from interface:IRandomAccess
Reads up to b.length bytes of data from this stream into an array of bytes.- Specified by:
read
in interfaceIRandomAccess
- Parameters:
b
- the array to fill from this stream- Returns:
- the total number of bytes read into the buffer.
- Throws:
java.io.IOException
- if reading is not possible
-
read
public int read(byte[] b, int off, int len) throws java.io.IOExceptionDescription copied from interface:IRandomAccess
Reads up to len bytes of data from this stream into an array of bytes.- Specified by:
read
in interfaceIRandomAccess
- Parameters:
b
- the array to fill from this streamoff
- the offset inb
from which to start filling; expected to be non-negative and no greater thanb.length - len
len
- the number of bytes to read; expected to be positive and no greater thanb.length - offset
- Returns:
- the total number of bytes read into the buffer.
- Throws:
java.io.IOException
- if reading is not possible
-
read
public int read(java.nio.ByteBuffer buffer) throws java.io.IOExceptionDescription copied from interface:IRandomAccess
Reads up to buffer.capacity() bytes of data from this stream into a ByteBuffer.- Specified by:
read
in interfaceIRandomAccess
- Parameters:
buffer
- the ByteBuffer to fill from this stream- Returns:
- the total number of bytes read into the buffer.
- Throws:
java.io.IOException
- if reading is not possible
-
read
public int read(java.nio.ByteBuffer buffer, int off, int len) throws java.io.IOExceptionDescription copied from interface:IRandomAccess
Reads up to len bytes of data from this stream into a ByteBuffer.- Specified by:
read
in interfaceIRandomAccess
- Parameters:
buffer
- the ByteBuffer to fill from this streamoff
- the offset inb
from which to start filling; expected to be non-negative and no greater thanbuffer.capacity() - len
len
- the number of bytes to read; expected to be positive and no greater thanbuffer.capacity() - offset
- Returns:
- the total number of bytes read into the buffer.
- Throws:
java.io.IOException
- if reading is not possible
-
seek
public void seek(long pos) throws java.io.IOExceptionDescription copied from interface:IRandomAccess
Sets the stream pointer offset, measured from the beginning of this stream, at which the next read or write occurs.- Specified by:
seek
in interfaceIRandomAccess
- Parameters:
pos
- new byte offset (pointer) in the current stream. Unless otherwise noted, may be larger or smaller than the current pointer, but must be non-negative and less than the value of #length()- Throws:
java.io.IOException
- ifpos
is invalid or the seek fails- See Also:
IRandomAccess.getFilePointer()
-
write
public void write(java.nio.ByteBuffer buf) throws java.io.IOExceptionDescription copied from interface:IRandomAccess
Writes up to buffer.capacity() bytes of data from the given ByteBuffer to this stream.- Specified by:
write
in interfaceIRandomAccess
- Parameters:
buf
- the ByteBuffer containing bytes to write to this stream- Throws:
java.io.IOException
- if writing is not possible
-
write
public void write(java.nio.ByteBuffer buf, int off, int len) throws java.io.IOExceptionDescription copied from interface:IRandomAccess
Writes up to len bytes of data from the given ByteBuffer to this stream.- Specified by:
write
in interfaceIRandomAccess
- Parameters:
buf
- the ByteBuffer containing bytes to write to this streamoff
- the offset inb
from which to start writing; expected to be non-negative and no greater thanbuf.capacity() - len
len
- the number of bytes to write; expected to be positive and no greater thanbuf.capacity() - offset
- Throws:
java.io.IOException
- if writing is not possible
-
getOrder
public java.nio.ByteOrder getOrder()Description copied from interface:IRandomAccess
Returns the current order (endianness) of the stream.- Specified by:
getOrder
in interfaceIRandomAccess
- Returns:
- See above.
-
setOrder
public void setOrder(java.nio.ByteOrder order)Description copied from interface:IRandomAccess
Sets the byte order (endianness) of the stream.- Specified by:
setOrder
in interfaceIRandomAccess
- Parameters:
order
- Order to set.
-
readBoolean
public boolean readBoolean() throws java.io.IOException- Specified by:
readBoolean
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readByte
public byte readByte() throws java.io.IOException- Specified by:
readByte
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readChar
public char readChar() throws java.io.IOException- Specified by:
readChar
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readDouble
public double readDouble() throws java.io.IOException- Specified by:
readDouble
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readFloat
public float readFloat() throws java.io.IOException- Specified by:
readFloat
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readFully
public void readFully(byte[] b) throws java.io.IOException- Specified by:
readFully
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readFully
public void readFully(byte[] b, int off, int len) throws java.io.IOException- Specified by:
readFully
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readInt
public int readInt() throws java.io.IOException- Specified by:
readInt
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readLine
public java.lang.String readLine() throws java.io.IOException- Specified by:
readLine
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readLong
public long readLong() throws java.io.IOException- Specified by:
readLong
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readShort
public short readShort() throws java.io.IOException- Specified by:
readShort
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readUnsignedByte
public int readUnsignedByte() throws java.io.IOException- Specified by:
readUnsignedByte
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readUnsignedShort
public int readUnsignedShort() throws java.io.IOException- Specified by:
readUnsignedShort
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readUTF
public java.lang.String readUTF() throws java.io.IOException- Specified by:
readUTF
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
skipBytes
public int skipBytes(int n) throws java.io.IOException- Specified by:
skipBytes
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
skipBytes
public long skipBytes(long n) throws java.io.IOExceptionDescription copied from interface:IRandomAccess
Along
variant ofDataInput.skipBytes(int)
.- Specified by:
skipBytes
in interfaceIRandomAccess
- Parameters:
n
- the number of bytes to skip- Returns:
- the number of bytes skipped
- Throws:
java.io.IOException
- if the operation failed
-
write
public void write(byte[] b) throws java.io.IOException- Specified by:
write
in interfacejava.io.DataOutput
- Throws:
java.io.IOException
-
write
public void write(byte[] b, int off, int len) throws java.io.IOException- Specified by:
write
in interfacejava.io.DataOutput
- Throws:
java.io.IOException
-
write
public void write(int b) throws java.io.IOException- Specified by:
write
in interfacejava.io.DataOutput
- Throws:
java.io.IOException
-
writeBoolean
public void writeBoolean(boolean v) throws java.io.IOException- Specified by:
writeBoolean
in interfacejava.io.DataOutput
- Throws:
java.io.IOException
-
writeByte
public void writeByte(int v) throws java.io.IOException- Specified by:
writeByte
in interfacejava.io.DataOutput
- Throws:
java.io.IOException
-
writeBytes
public void writeBytes(java.lang.String s) throws java.io.IOException- Specified by:
writeBytes
in interfacejava.io.DataOutput
- Throws:
java.io.IOException
-
writeChar
public void writeChar(int v) throws java.io.IOException- Specified by:
writeChar
in interfacejava.io.DataOutput
- Throws:
java.io.IOException
-
writeChars
public void writeChars(java.lang.String s) throws java.io.IOException- Specified by:
writeChars
in interfacejava.io.DataOutput
- Throws:
java.io.IOException
-
writeDouble
public void writeDouble(double v) throws java.io.IOException- Specified by:
writeDouble
in interfacejava.io.DataOutput
- Throws:
java.io.IOException
-
writeFloat
public void writeFloat(float v) throws java.io.IOException- Specified by:
writeFloat
in interfacejava.io.DataOutput
- Throws:
java.io.IOException
-
writeInt
public void writeInt(int v) throws java.io.IOException- Specified by:
writeInt
in interfacejava.io.DataOutput
- Throws:
java.io.IOException
-
writeLong
public void writeLong(long v) throws java.io.IOException- Specified by:
writeLong
in interfacejava.io.DataOutput
- Throws:
java.io.IOException
-
writeShort
public void writeShort(int v) throws java.io.IOException- Specified by:
writeShort
in interfacejava.io.DataOutput
- Throws:
java.io.IOException
-
writeUTF
public void writeUTF(java.lang.String str) throws java.io.IOException- Specified by:
writeUTF
in interfacejava.io.DataOutput
- Throws:
java.io.IOException
-
resetStream
protected abstract void resetStream() throws java.io.IOExceptionClose and reopen the stream; the stream pointer and mark should be reset to 0. This method is called if we need to seek backwards within the stream.- Throws:
java.io.IOException
- if the stream cannot be reset
-