|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectorg.entityfs.util.io.TempFileBackedRandomAccess
public class TempFileBackedRandomAccess
This object can be used to open a RandomAccess on a file from a file
system that does not support the FSCRandomAccessFiles capability. It
copies the master file's contents to a temporary file in another file system
that supports FSCRandomAccessFiles and lets the client use a
RandomAccess from that file. If the client writes to the
RandomAccess, changes are flushed to the master file when this object
is closed or whenever flush() is called.
Until this object is close():d, it holds a read or a write lock on
the master file, depending on the RandomAccessMode used for opening
it. The temporary file is also locked. Since this object keeps those locks
internally, it can only be used from the thread that created it.
For read only files, InputStreamBackedRandomAccess may be faster.
InputStreamBackedRandomAccess| Constructor Summary | |
|---|---|
TempFileBackedRandomAccess(EFile f,
DirectoryView tmpDir,
RandomAccessMode mode)
Create a new temporary file-backed RandomAccess object. |
|
TempFileBackedRandomAccess(EFile f,
DirectoryView tmpDir,
String tmpFileName,
RandomAccessMode mode)
Create a new temporary file-backed RandomAccess object. |
|
TempFileBackedRandomAccess(EFile f,
FileSystem fs,
RandomAccessMode mode)
Create a new temporary file-backed RandomAccess object. |
|
| Method Summary | |
|---|---|
void |
addCloseObserver(RandomAccessCloseObserver raco)
Add an observer that is notified when this RandomAccess is
closed. |
int |
available()
Returns an estimate of the number of bytes that can be read from this data source without blocking by the next invocation of a method for this data source. |
void |
close()
Close the RandomAccess and flush changes to the master file, if
there has been any. |
protected void |
finalize()
|
void |
flush()
If the temporary file has been written to, flush changes to the master file. |
long |
getFilePointer()
Get the current offset in the file. |
RandomAccessMode |
getMode()
Get the mode that this RandomAccess was opened in. |
long |
length()
Get the file's current length. |
int |
read()
Read a byte of data from the source. |
int |
read(byte[] barr)
Read up to b.length bytes of data from the source into the array. |
int |
read(byte[] barr,
int off,
int len)
Read up to len bytes of data from the source into the array. |
void |
seek(long pos)
Set the file pointer offset, measured from the beginning of the file. |
void |
setLength(long l)
Set the length of the file. |
long |
skipBytes(long n)
Attempt to skip over n bytes in the source. |
void |
write(byte[] barr)
Write the contents of the array to the sink, starting at the current file pointer. |
void |
write(byte[] barr,
int off,
int len)
Write len bytes from the array, starting at the offset off to this sink. |
void |
write(int b)
Write a byte to the sink. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
|---|
public TempFileBackedRandomAccess(EFile f,
FileSystem fs,
RandomAccessMode mode)
throws IllegalArgumentException,
FileSystemException
RandomAccess object.
f - The file to get a RandomAccess for.fs - The file system in whose temporary files directory the
temporary file should be created. The file system must support the
FSCRandomAccessFiles capability. See
FileSystem.setTemporaryFilesDirectory(org.entityfs.Directory)
.mode - The mode to open the file in.
IllegalArgumentException - If the supplied file system does not
have its temporary files directory set.
FileSystemException - On other errors when initializing the
temporary file.
public TempFileBackedRandomAccess(EFile f,
DirectoryView tmpDir,
RandomAccessMode mode)
throws FileSystemException
RandomAccess object.
f - The file to get a RandomAccess for.tmpDir - The directory where the temporary file should be created.
This directory must be in a file system that supports the
FSCRandomAccessFiles capability.mode - The mode to open the file in.
FileSystemException - On errors when initializing the temporary
file.
public TempFileBackedRandomAccess(EFile f,
DirectoryView tmpDir,
String tmpFileName,
RandomAccessMode mode)
throws FileSystemException
RandomAccess object.
f - The file to get a RandomAccess for.tmpDir - The directory where the temporary file should be put. This
directory must be in a file system that supports the
FSCRandomAccessFiles capability.tmpFileName - The name of the temporary file. If null, a
unique temporary file name is created by calling
DirectoryView.getUniqueEntityName(String, String) on
the temporary directory.mode - The mode to open the file in.
FileSystemException - On errors setting up the temporary file.| Method Detail |
|---|
public int available()
DataSource
available in interface DataSourceInputStream.available()public long length()
RandomAccess
length in interface RandomAccesspublic long getFilePointer()
RandomAccess
getFilePointer in interface RandomAccess
public int read()
throws IllegalStateException
DataSource0x00-0x0ff).
read in interface DataSource-1 if the end of the source has
been reached.
IllegalStateException - If the source is closed.
public int read(byte[] barr)
throws IllegalStateException
DataSourceb.length bytes of data from the source into the array.
read in interface DataSourcebarr - The byte array into which data is read.
-1 if
no data could be read because the the end of the source was reached
before the read started.
IllegalStateException - If the source is closed.
public int read(byte[] barr,
int off,
int len)
throws IllegalStateException
DataSourcelen bytes of data from the source into the array.
read in interface DataSourcebarr - The byte array into which data is read.off - The start offset in the array b at which data is
written.len - The maximum number of bytes to read.
-1 if
no data could be read because the end of the source was reached before
the read started.
IllegalStateException - If the source is closed.
public void seek(long pos)
throws FileSystemException,
IllegalStateException
RandomAccess
seek in interface RandomAccesspos - The new file pointer offset, measured from the beginning of
the file.
FileSystemException - If pos < 0.
IllegalStateException - If the random access file is closed.DataSource.skipBytes(long)
public void setLength(long l)
throws ReadOnlyException,
IllegalStateException
RandomAccess
If the present length of the file is greater than the l argument,
the file will be truncated.
If the new length is bigger than the current length of the file, the file will be extended. The contents of the extended portion of the file are not defined.
The current file pointer is not changed, unless the file pointer offset is greater than the new file length. If so, it will be set to the new length.
setLength in interface RandomAccessl - The new length of the file.
ReadOnlyException - If the file is opened read only.
IllegalStateException - If the random access file is closed.
public long skipBytes(long n)
throws IllegalStateException
DataSourcen bytes in the source. If n is
negative, no bytes are skipped.
The pointer in the source cannot be moved beyond EOF using this method
(unlike RandomAccess.seek(long)).
skipBytes in interface DataSourcen - The number of bytes to increment the source pointer with.
IllegalStateException - If the source is closed.RandomAccess.seek(long)
public void write(byte[] barr)
throws ReadOnlyException,
IllegalStateException
DataSink
write in interface DataSinkbarr - The array to write.
ReadOnlyException - If the sink is opened read only.
IllegalStateException - If the sink is closed.
public void write(byte[] barr,
int off,
int len)
throws ReadOnlyException,
IllegalStateException
DataSinklen bytes from the array, starting at the offset off to this sink.
write in interface DataSinkbarr - The byte array.off - The starting offset in the array.len - The number of bytes to write.
ReadOnlyException - If the sink is opened read only.
IllegalStateException - If the sink file is closed.
public void write(int b)
throws ReadOnlyException,
IllegalStateException
DataSink
write in interface DataSinkb - The byte to write.
ReadOnlyException - If the sink is opened read only.
IllegalStateException - If the random access file is closed.
public void flush()
throws WrappedIOException,
IllegalStateException
flush in interface DataSinkWrappedIOException - On I/O errors.
IllegalStateException - If the sink is closed.public RandomAccessMode getMode()
RandomAccessRandomAccess was opened in.
This method does not throw an IllegalStateException if it is
called after the RandomAccess has been closed.
getMode in interface RandomAccessRandomAccess was opened in.public void addCloseObserver(RandomAccessCloseObserver raco)
RandomAccessRandomAccess is
closed. The observers are called just after the RandomAccess has
been closed.
addCloseObserver in interface RandomAccessraco - The observer.
public void close()
throws FileSystemException
RandomAccess and flush changes to the master file, if
there has been any. Deletes the temporary file and releases all locks on
the master file.
This method acquires a temporary write lock on the temporary file's parent directory.
If the flushing fails, this object is not closed.
close in interface DataSinkclose in interface DataSourceFileSystemException - On errors. If the flushing fails, this object
is not closed.
protected void finalize()
throws Throwable
finalize in class ObjectThrowable
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||