TrueZIP Kernel 7.0-rc1

de.schlichtherle.truezip.rof
Class BufferedReadOnlyFile

java.lang.Object
  extended by de.schlichtherle.truezip.rof.AbstractReadOnlyFile
      extended by de.schlichtherle.truezip.rof.DecoratingReadOnlyFile
          extended by de.schlichtherle.truezip.rof.BufferedReadOnlyFile
All Implemented Interfaces:
ReadOnlyFile, Closeable

@NotThreadSafe
public class BufferedReadOnlyFile
extends DecoratingReadOnlyFile

A ReadOnlyFile implementation which provides buffered random read only access to another ReadOnlyFile.

Note: This class implements its own virtual file pointer. Thus, if you would like to access the underlying ReadOnlyFile again after you have finished working with an instance of this class, you should synchronize their file pointers using the pattern as described in DecoratingReadOnlyFile.

Author:
Christian Schlichtherle

Field Summary
private  boolean closed
           
private  long fp
          The virtual file pointer in the file data.
private  long length
           
private  byte[] window
          The buffer window to the file data.
static int WINDOW_LEN
          The default buffer length of the window to the file.
private  long windowOff
          The current offset in the read only file where the buffer window starts.
 
Fields inherited from class de.schlichtherle.truezip.rof.DecoratingReadOnlyFile
delegate
 
Constructor Summary
  BufferedReadOnlyFile(File file)
          Creates a new instance of BufferedReadOnlyFile.
  BufferedReadOnlyFile(File file, int windowLen)
          Creates a new instance of BufferedReadOnlyFile.
  BufferedReadOnlyFile(ReadOnlyFile rof)
          Creates a new instance of BufferedReadOnlyFile.
private BufferedReadOnlyFile(ReadOnlyFile rof, File file, int windowLen)
           
  BufferedReadOnlyFile(ReadOnlyFile rof, int windowLen)
          Creates a new instance of BufferedReadOnlyFile.
 
Method Summary
private  void assertOpen()
          Asserts that this file is open.
 void close()
          Closes this read only file.
 long getFilePointer()
          Returns the current byte position in the file as a zero-based index.
private  void invalidateWindow()
          Forces the window to be reloaded on the next call to positionWindow().
 long length()
          Returns the length of the file in bytes.
protected static long max(long a, long b)
          Returns the greater parameter.
protected static long min(long a, long b)
          Returns the smaller parameter.
private  void positionWindow()
          Positions the window so that the block containing the current virtual file pointer in the encrypted file is entirely contained in it.
 int read()
          Reads and returns the next byte or -1 if the end of the file has been reached.
 int read(byte[] buf, int off, int len)
          Reads up to len bytes of data from this read only file into the given array.
 void seek(long fp)
          Sets the current byte position in the file as a zero-based index at which the next read occurs.
 
Methods inherited from class de.schlichtherle.truezip.rof.DecoratingReadOnlyFile
toString
 
Methods inherited from class de.schlichtherle.truezip.rof.AbstractReadOnlyFile
read, readFully, readFully
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

WINDOW_LEN

public static final int WINDOW_LEN
The default buffer length of the window to the file.

See Also:
Constant Field Values

length

private long length

fp

private long fp
The virtual file pointer in the file data. This is relative to the start of the file.


windowOff

private long windowOff
The current offset in the read only file where the buffer window starts. This is always a multiple of the buffer window size.


window

private final byte[] window
The buffer window to the file data.


closed

private boolean closed
Constructor Detail

BufferedReadOnlyFile

public BufferedReadOnlyFile(File file)
                     throws NullPointerException,
                            FileNotFoundException,
                            IOException
Creates a new instance of BufferedReadOnlyFile.

Parameters:
file - The file to read.
Throws:
NullPointerException - If any of the parameters is null.
FileNotFoundException - If the file cannot get opened for reading.
IOException - On any other I/O related issue.

BufferedReadOnlyFile

public BufferedReadOnlyFile(File file,
                            int windowLen)
                     throws NullPointerException,
                            FileNotFoundException,
                            IOException
Creates a new instance of BufferedReadOnlyFile.

Parameters:
file - The file to read.
windowLen - The size of the buffer window in bytes.
Throws:
NullPointerException - If any of the parameters is null.
FileNotFoundException - If the file cannot get opened for reading.
IOException - On any other I/O related issue.

BufferedReadOnlyFile

public BufferedReadOnlyFile(ReadOnlyFile rof)
                     throws NullPointerException,
                            FileNotFoundException,
                            IOException
Creates a new instance of BufferedReadOnlyFile.

Parameters:
rof - The read only file to read.
Throws:
NullPointerException - If any of the parameters is null.
FileNotFoundException - If the file cannot get opened for reading.
IOException - On any other I/O related issue.

BufferedReadOnlyFile

public BufferedReadOnlyFile(ReadOnlyFile rof,
                            int windowLen)
                     throws NullPointerException,
                            FileNotFoundException,
                            IOException
Creates a new instance of BufferedReadOnlyFile.

Parameters:
rof - The read only file to read.
windowLen - The size of the buffer window in bytes.
Throws:
NullPointerException - If any of the parameters is null.
FileNotFoundException - If the file cannot get opened for reading.
IOException - On any other I/O related issue.

BufferedReadOnlyFile

private BufferedReadOnlyFile(ReadOnlyFile rof,
                             File file,
                             int windowLen)
                      throws NullPointerException,
                             FileNotFoundException,
                             IOException
Throws:
NullPointerException
FileNotFoundException
IOException
Method Detail

min

protected static long min(long a,
                          long b)
Returns the smaller parameter.


max

protected static long max(long a,
                          long b)
Returns the greater parameter.


length

public long length()
            throws IOException
Description copied from interface: ReadOnlyFile
Returns the length of the file in bytes.

Specified by:
length in interface ReadOnlyFile
Overrides:
length in class DecoratingReadOnlyFile
Throws:
IOException

getFilePointer

public long getFilePointer()
                    throws IOException
Description copied from interface: ReadOnlyFile
Returns the current byte position in the file as a zero-based index.

Specified by:
getFilePointer in interface ReadOnlyFile
Overrides:
getFilePointer in class DecoratingReadOnlyFile
Throws:
IOException

seek

public void seek(long fp)
          throws IOException
Description copied from interface: ReadOnlyFile
Sets the current byte position in the file as a zero-based index at which the next read occurs. Whether the offset may be set beyond the end of the file is up to the implementor. For example, the DefaultReadOnlyFile subclass RandomAccessFile passes "r" as a parameter to the superclass constructor. With Sun's JSE implementation, on the Windows platform this implementation allows to seek past the end of file, but on the Linux platform it doesn't.

Specified by:
seek in interface ReadOnlyFile
Overrides:
seek in class DecoratingReadOnlyFile
Parameters:
fp - The current byte position as a zero-based index.
Throws:
IOException - If pos is less than 0 or if an I/O error occurs.

read

public int read()
         throws IOException
Description copied from interface: ReadOnlyFile
Reads and returns the next byte or -1 if the end of the file has been reached.

Specified by:
read in interface ReadOnlyFile
Overrides:
read in class DecoratingReadOnlyFile
Throws:
IOException

read

public int read(byte[] buf,
                int off,
                int len)
         throws IOException
Description copied from interface: ReadOnlyFile
Reads up to len bytes of data from this read only file into the given array. This method blocks until at least one byte of input is available.

Specified by:
read in interface ReadOnlyFile
Overrides:
read in class DecoratingReadOnlyFile
Parameters:
buf - The buffer to fill with data.
off - The start offset of the data.
len - The maximum number of bytes to read.
Returns:
The total number of bytes read, or -1 if there is no more data because the end of the file has been reached.
Throws:
IOException - On any I/O related issue.

close

public void close()
           throws IOException
Closes this read only file. As a side effect, this will set the reference to the underlying read only file (DecoratingReadOnlyFile.delegate to null.

Specified by:
close in interface ReadOnlyFile
Specified by:
close in interface Closeable
Overrides:
close in class DecoratingReadOnlyFile
Throws:
IOException

assertOpen

private void assertOpen()
                 throws IOException
Asserts that this file is open.

Throws:
IOException - If the preconditions do not hold.

positionWindow

private void positionWindow()
                     throws IOException
Positions the window so that the block containing the current virtual file pointer in the encrypted file is entirely contained in it.

Throws:
IOException - On any I/O related issue. The window is invalidated in this case.

invalidateWindow

private void invalidateWindow()
Forces the window to be reloaded on the next call to positionWindow().


TrueZIP Kernel 7.0-rc1

Copyright © 2005-2011 Schlichtherle IT Services. All Rights Reserved.