TrueZIP Kernel 7.0-rc2

de.schlichtherle.truezip.rof
Class DecoratingReadOnlyFile

java.lang.Object
  extended by de.schlichtherle.truezip.rof.AbstractReadOnlyFile
      extended by de.schlichtherle.truezip.rof.DecoratingReadOnlyFile
All Implemented Interfaces:
ReadOnlyFile, Closeable
Direct Known Subclasses:
BufferedReadOnlyFile, ConcurrentInputShop.ConcurrentReadOnlyFile, FsStatistics.CountingReadOnlyFile, IOCache.Buffer.BufferReadOnlyFile, LazyInputSocket.ProxyReadOnlyFile, SynchronizedReadOnlyFile

@ThreadSafe
@DefaultAnnotation(value=edu.umd.cs.findbugs.annotations.NonNull.class)
public abstract class DecoratingReadOnlyFile
extends AbstractReadOnlyFile

An abstract decorator for a read only file.

Note that subclasses of this class may implement their own virtual file pointer. Thus, if you would like to access the underlying ReadOnlyFile again after you have finished working with the FilteredReadOnlyFile, you should synchronize its file pointer like this:

     ReadOnlyFile rof = new DefaultReadOnlyFile(new File("HelloWorld.java"));
     try {
         ReadOnlyFile frof = new FilteredReadOnlyFile(rof);
         try {
             // Do any file input on brof here...
             frof.seek(1);
         } finally {
             // Synchronize the file pointers.
             rof.seek(frof.getFilePointer());
         }
         // This assertion would fail if we hadn't done the file pointer
         // synchronization!
         assert rof.getFilePointer() == 1;
     } finally {
         rof.close();
     }
 
This does not apply to this base class, however.

Subclasses implemententing their own virtual file pointer should add a note referring to this classes Javadoc like this:

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
protected  ReadOnlyFile delegate
          The nullable decorated read only file.
 
Constructor Summary
protected DecoratingReadOnlyFile(ReadOnlyFile rof)
          Creates a new instance of DecoratingReadOnlyFile, which filters the given read only file.
 
Method Summary
 void close()
          Closes this read-only file and releases any non-heap resources allocated for it.
 long getFilePointer()
          Returns the current byte position in the file as a zero-based index.
 long length()
          Returns the length of the file in bytes.
 int read()
          Reads and returns the next byte or -1 if the end of the file has been reached.
 int read(byte[] b, int off, int len)
          Reads up to len bytes of data from this read only file into the given array.
 void seek(long pos)
          Sets the current byte position in the file as a zero-based index at which the next read occurs.
 String toString()
          Returns a string representation of this object for debugging and logging purposes.
 
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

delegate

@Nullable
protected ReadOnlyFile delegate
The nullable decorated read only file.

Constructor Detail

DecoratingReadOnlyFile

protected DecoratingReadOnlyFile(@CheckForNull
                                 ReadOnlyFile rof)
Creates a new instance of DecoratingReadOnlyFile, which filters the given read only file.

Method Detail

length

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

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.

Throws:
IOException

seek

public void seek(long pos)
          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.

Parameters:
pos - 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.

Throws:
IOException

read

public int read(byte[] b,
                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.

Parameters:
b - 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
Description copied from interface: ReadOnlyFile
Closes this read-only file and releases any non-heap resources allocated for it.

Throws:
IOException

toString

public String toString()
Returns a string representation of this object for debugging and logging purposes.

Overrides:
toString in class Object

TrueZIP Kernel 7.0-rc2

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