@ThreadSafe @DefaultAnnotation(value=edu.umd.cs.findbugs.annotations.NonNull.class) public abstract class DecoratingReadOnlyFile extends AbstractReadOnlyFile
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 underlyingReadOnlyFileagain after you have finished working with an instance of this class, you should synchronize their file pointers using the pattern as described inDecoratingReadOnlyFile.
| Modifier and Type | Field and Description |
|---|---|
protected ReadOnlyFile |
delegate
The nullable decorated read only file.
|
| Modifier | Constructor and Description |
|---|---|
protected |
DecoratingReadOnlyFile(ReadOnlyFile rof)
Constructs a new decorating read only file.
|
| Modifier and Type | Method and Description |
|---|---|
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.
|
read, readFully, readFully@Nullable protected ReadOnlyFile delegate
protected DecoratingReadOnlyFile(@CheckForNull
ReadOnlyFile rof)
rof - the read only file to wrap in this decorator.public long length()
throws IOException
ReadOnlyFileIOExceptionpublic long getFilePointer()
throws IOException
ReadOnlyFileIOExceptionpublic void seek(long pos)
throws IOException
ReadOnlyFileDefaultReadOnlyFile 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.pos - The current byte position as a zero-based index.IOException - If pos is less than 0 or if
an I/O error occurs.public int read()
throws IOException
ReadOnlyFileIOExceptionpublic int read(byte[] b,
int off,
int len)
throws IOException
ReadOnlyFilelen bytes of data from this read only file into
the given array.
This method blocks until at least one byte of input is available.b - The buffer to fill with data.off - The start offset of the data.len - The maximum number of bytes to read.-1 if there is
no more data because the end of the file has been reached.IOException - On any I/O related issue.public void close()
throws IOException
ReadOnlyFileIOExceptionCopyright © 2005-2011 Schlichtherle IT Services. All Rights Reserved.