Class MultiMappedFile

java.lang.Object
uk.ac.starlink.oldfits.AbstractArrayDataIO
uk.ac.starlink.oldfits.MultiMappedFile
All Implemented Interfaces:
Closeable, DataInput, DataOutput, AutoCloseable, nom.tam.util.ArrayDataInput, nom.tam.util.ArrayDataOutput, nom.tam.util.FitsIO, nom.tam.util.RandomAccess

public class MultiMappedFile extends AbstractArrayDataIO implements nom.tam.util.RandomAccess
ArrayDataIO implementation which works by mapping but is capable of splitting a file up into multiple mapped sections. This will be necessary if it's larger than Integer.MAX_VALUE bytes, though note that doing this is only going to be a good idea on a 64-bit OS.
Since:
9 Jan 2007
Author:
Mark Taylor
  • Constructor Details

    • MultiMappedFile

      public MultiMappedFile(FileChannel chan, FileChannel.MapMode mode, int blockBytes) throws IOException
      Constructs a MultiMappedFile from a channel.
      Parameters:
      chan - file channel
      mode - mapping mode
      blockBytes - number of bytes per mapped block (though the final one may have fewer)
      Throws:
      IOException
    • MultiMappedFile

      public MultiMappedFile(File file, FileChannel.MapMode mode, int blockBytes) throws IOException
      Constructs a MultiMappedFile from a file.
      Parameters:
      file - file
      mode - mapping mode
      blockBytes - number of bytes per mapped block (though the final one may have fewer)
      Throws:
      IOException
  • Method Details

    • seek

      public void seek(long offsetFromStart) throws IOException
      Specified by:
      seek in interface nom.tam.util.RandomAccess
      Throws:
      IOException
    • skip

      public long skip(long nskip) throws IOException
      Specified by:
      skip in interface nom.tam.util.ArrayDataInput
      Throws:
      IOException
    • skipAllBytes

      public void skipAllBytes(long nskip) throws IOException
      Specified by:
      skipAllBytes in interface nom.tam.util.ArrayDataInput
      Throws:
      IOException
    • skipAllBytes

      public void skipAllBytes(int toSkip) throws IOException
      Specified by:
      skipAllBytes in interface nom.tam.util.ArrayDataInput
      Throws:
      IOException
    • getFilePointer

      public long getFilePointer()
      Specified by:
      getFilePointer in interface nom.tam.util.RandomAccess
    • skipBytes

      public int skipBytes(int toSkip) throws IOException
      Specified by:
      skipBytes in interface DataInput
      Throws:
      IOException
    • markSupported

      public boolean markSupported()
    • mark

      public void mark(int readlimit)
      Specified by:
      mark in interface nom.tam.util.ArrayDataInput
    • reset

      public void reset() throws IOException
      Specified by:
      reset in interface nom.tam.util.ArrayDataInput
      Throws:
      IOException
    • get

      protected byte get() throws IOException
      Description copied from class: AbstractArrayDataIO
      Reads one byte from the current position.
      Specified by:
      get in class AbstractArrayDataIO
      Returns:
      next byte
      Throws:
      IOException
    • get

      protected void get(byte[] buf, int offset, int length) throws IOException
      Description copied from class: AbstractArrayDataIO
      Reads bytes into a buffer from the current position.
      Specified by:
      get in class AbstractArrayDataIO
      Parameters:
      buf - destination buffer
      offset - offset of first byte in buf to be written
      length - maximum number of bytes to be written to buf
      Throws:
      IOException
    • put

      protected void put(byte b) throws IOException
      Description copied from class: AbstractArrayDataIO
      Writes a single byte at the current position.
      Specified by:
      put in class AbstractArrayDataIO
      Parameters:
      b - output byte
      Throws:
      IOException
    • put

      protected void put(byte[] buf, int offset, int length) throws IOException
      Description copied from class: AbstractArrayDataIO
      Writes bytes from a buffer to the current position.
      Specified by:
      put in class AbstractArrayDataIO
      Parameters:
      buf - source buffer
      offset - offset of first byte in buf to be read
      length - number of bytes from buf to be read
      Throws:
      IOException
    • length

      public long length()
      Description copied from class: AbstractArrayDataIO
      Returns the size of this buffer. May be -1 if not known/unlimited.
      Specified by:
      length in class AbstractArrayDataIO
      Returns:
      length or -1
    • remaining

      protected long remaining()
      Description copied from class: AbstractArrayDataIO
      Returns 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 return Long.MAX_VALUE;
      Specified by:
      remaining in class AbstractArrayDataIO
      Returns:
      number of bytes left in file
    • close

      public void close() throws IOException
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Specified by:
      close in interface nom.tam.util.FitsIO
      Throws:
      IOException
    • flush

      public void flush()
      Specified by:
      flush in interface nom.tam.util.ArrayDataOutput