Package uk.ac.starlink.fits
Class MappedFile
- java.lang.Object
-
- uk.ac.starlink.fits.AbstractArrayDataIO
-
- uk.ac.starlink.fits.MappedFile
-
- All Implemented Interfaces:
java.io.Closeable,java.io.DataInput,java.io.DataOutput,java.lang.AutoCloseable,nom.tam.util.ArrayDataInput,nom.tam.util.ArrayDataOutput,nom.tam.util.FitsIO,nom.tam.util.RandomAccess
public class MappedFile extends AbstractArrayDataIO implements nom.tam.util.RandomAccess
Provides mapped access to a data buffer using a single mapped byte buffer, compatible with nom.tam.util classes.This class implements the nom.tam.util ArrayDataInput, ArrayDataOutput and RandomAccess interfaces in the same way that nom.tam.util.BufferedFile does. Hence it can be used as a drop-in replacement for BufferedFile. Unlike BufferedFile however, it does mapped access to files (using java.nio.Buffer objects). This may be moderately more efficient for sequential access to a file, but is dramatically more efficient if very random access is required. This is because BufferedFile effectively always assumes that you are going to read sequentially, so that accessing a single datum distant from (or before) the last datum accessed always results in filling a whole buffer.
Limitations:
- Files larger than Integer.MAX_VALUE bytes may not currently be accessed
- Access to very large files may fail if virtual memory runs out
- Since:
- 30 Aug 2002
- Author:
- Mark Taylor (Starlink)
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classMappedFile.FileTooLongExceptionException indicating that a file is too long to map.
-
Field Summary
-
Fields inherited from interface nom.tam.util.FitsIO
BITS_OF_1_BYTE, BITS_OF_2_BYTES, BITS_OF_3_BYTES, BITS_OF_4_BYTES, BITS_OF_5_BYTES, BITS_OF_6_BYTES, BITS_OF_7_BYTES, BYTE_1_OF_LONG_MASK, BYTE_2_OF_LONG_MASK, BYTE_3_OF_LONG_MASK, BYTE_4_OF_LONG_MASK, BYTE_MASK, BYTES_IN_BOOLEAN, BYTES_IN_BYTE, BYTES_IN_CHAR, BYTES_IN_DOUBLE, BYTES_IN_FLOAT, BYTES_IN_INTEGER, BYTES_IN_LONG, BYTES_IN_SHORT, DEFAULT_BUFFER_SIZE, HIGH_INTEGER_MASK, INTEGER_MASK, SHORT_MASK, SHORT_OF_LONG_MASK
-
-
Constructor Summary
Constructors Constructor Description MappedFile(java.lang.String filename)Constructs a MappedFile object by mapping the whole of an existing file using read-only mode.MappedFile(java.lang.String filename, java.lang.String mode)Constructs a MappedFile object by mapping the whole of an existing file with a given mode.MappedFile(java.lang.String filename, java.lang.String mode, long start, int size)Constructs a MappedFile object by mapping part of an existing file with a given mode.MappedFile(java.nio.ByteBuffer buf)Constructs a MappedFile object from a byte buffer.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclose()voidflush()protected byteget()Reads one byte from the current position.protected voidget(byte[] buf, int offset, int length)Reads bytes into a buffer from the current position.longgetFilePointer()longlength()Returns the size of this buffer.voidmark(int readlimit)booleanmarkSupported()protected voidput(byte b)Writes a single byte at the current position.protected voidput(byte[] buf, int offset, int length)Writes bytes from a buffer to the current position.protected longremaining()Returns the number of bytes remaining between the current position and the end of the file.voidreset()voidseek(long offsetFromStart)longskip(long offset)voidskipAllBytes(int toSkip)voidskipAllBytes(long toSkip)intskipBytes(int toSkip)-
Methods inherited from class uk.ac.starlink.fits.AbstractArrayDataIO
read, read, read, read, read, read, read, read, read, read, read, read, read, read, read, read, readArray, readBoolean, readByte, readChar, readDouble, readFloat, readFully, readFully, readInt, readLArray, readLine, readLong, readShort, readUnsignedByte, readUnsignedShort, readUTF, write, write, write, write, write, write, write, write, write, write, write, write, write, write, write, write, write, write, write, writeArray, writeBoolean, writeByte, writeBytes, writeChar, writeChars, writeDouble, writeFloat, writeInt, writeLong, writeShort, writeUTF
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
-
-
-
Constructor Detail
-
MappedFile
public MappedFile(java.nio.ByteBuffer buf)
Constructs a MappedFile object from a byte buffer.- Parameters:
buf- byte buffer
-
MappedFile
public MappedFile(java.lang.String filename) throws java.io.IOExceptionConstructs a MappedFile object by mapping the whole of an existing file using read-only mode.- Parameters:
filename- name of the file to map- Throws:
MappedFile.FileTooLongException- if the file is too long to mapjava.io.IOException
-
MappedFile
public MappedFile(java.lang.String filename, java.lang.String mode) throws java.io.IOExceptionConstructs a MappedFile object by mapping the whole of an existing file with a given mode.- Parameters:
filename- name of the file to mapmode- mode- Throws:
MappedFile.FileTooLongException- if the file is too long to mapjava.io.IOException
-
MappedFile
public MappedFile(java.lang.String filename, java.lang.String mode, long start, int size) throws java.io.IOExceptionConstructs a MappedFile object by mapping part of an existing file with a given mode.- Parameters:
filename- name of the file to mapmode- modestart- offset of region to mapsize- length of region to map- Throws:
java.io.IOException
-
-
Method Detail
-
seek
public void seek(long offsetFromStart) throws java.io.IOException- Specified by:
seekin interfacenom.tam.util.RandomAccess- Throws:
java.io.IOException
-
skip
public long skip(long offset)
- Specified by:
skipin interfacenom.tam.util.ArrayDataInput
-
getFilePointer
public long getFilePointer()
- Specified by:
getFilePointerin interfacenom.tam.util.RandomAccess
-
skipBytes
public int skipBytes(int toSkip)
- Specified by:
skipBytesin interfacejava.io.DataInput
-
skipAllBytes
public void skipAllBytes(long toSkip) throws java.io.IOException- Specified by:
skipAllBytesin interfacenom.tam.util.ArrayDataInput- Throws:
java.io.IOException
-
skipAllBytes
public void skipAllBytes(int toSkip) throws java.io.IOException- Specified by:
skipAllBytesin interfacenom.tam.util.ArrayDataInput- Throws:
java.io.IOException
-
markSupported
public boolean markSupported()
-
mark
public void mark(int readlimit)
- Specified by:
markin interfacenom.tam.util.ArrayDataInput
-
reset
public void reset() throws java.io.IOException- Specified by:
resetin interfacenom.tam.util.ArrayDataInput- Throws:
java.io.IOException
-
get
protected byte get() throws java.io.IOExceptionDescription copied from class:AbstractArrayDataIOReads one byte from the current position.- Specified by:
getin classAbstractArrayDataIO- Returns:
- next byte
- Throws:
java.io.IOException
-
get
protected void get(byte[] buf, int offset, int length) throws java.io.IOExceptionDescription copied from class:AbstractArrayDataIOReads bytes into a buffer from the current position.- Specified by:
getin classAbstractArrayDataIO- Parameters:
buf- destination bufferoffset- offset of first byte inbufto be writtenlength- maximum number of bytes to be written tobuf- Throws:
java.io.IOException
-
put
protected void put(byte b) throws java.io.IOExceptionDescription copied from class:AbstractArrayDataIOWrites a single byte at the current position.- Specified by:
putin classAbstractArrayDataIO- Parameters:
b- output byte- Throws:
java.io.IOException
-
put
protected void put(byte[] buf, int offset, int length) throws java.io.IOExceptionDescription copied from class:AbstractArrayDataIOWrites bytes from a buffer to the current position.- Specified by:
putin classAbstractArrayDataIO- Parameters:
buf- source bufferoffset- offset of first byte inbufto be readlength- number of bytes frombufto be read- Throws:
java.io.IOException
-
length
public long length()
Description copied from class:AbstractArrayDataIOReturns the size of this buffer. May be -1 if not known/unlimited.- Specified by:
lengthin classAbstractArrayDataIO- Returns:
- length or -1
-
remaining
protected long remaining()
Description copied from class:AbstractArrayDataIOReturns the number of bytes remaining between the current position and the end of the file. If there is no end to the file, it is permissible to returnLong.MAX_VALUE;- Specified by:
remainingin classAbstractArrayDataIO- Returns:
- number of bytes left in file
-
close
public void close()
- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.io.Closeable- Specified by:
closein interfacenom.tam.util.FitsIO
-
flush
public void flush()
- Specified by:
flushin interfacenom.tam.util.ArrayDataOutput
-
-