public class MoveFileByteStore extends Object implements ByteStore
FileByteStore
, but it writes
to a temporary file, and when it's complete it renames it to the
requested destination file.
The point of this is so that two copies of the same named file are
being written at once, they will not interfere with each other.
This implementation interferes slightly with the implicit contract
of ByteStore, in that all the writing to the output stream has to
be complete before a call to copy(java.io.OutputStream)
or toByteBuffers()
,
but that's what you'd do in normal usage anyway.
Constructor and Description |
---|
MoveFileByteStore(File file)
Constructor.
|
Modifier and Type | Method and Description |
---|---|
void |
close()
Tidies up.
|
void |
copy(OutputStream out)
Takes all the data written so far into this store's sink stream
and copies it to a destination stream.
|
long |
getLength()
Returns the number of bytes currently stored in this object.
|
OutputStream |
getOutputStream()
Returns an output stream which can be used to write to the store.
|
ByteBuffer[] |
toByteBuffers()
Returns an array of byte buffers containing the bytes written
to this store.
|
public MoveFileByteStore(File file) throws IOException
file
- destination filenameIOException
public OutputStream getOutputStream()
ByteStore
BufferedOutputStream
for efficiency if required.getOutputStream
in interface ByteStore
public long getLength()
ByteStore
public void copy(OutputStream out) throws IOException
ByteStore
copy
in interface ByteStore
out
- data destination streamIOException
public ByteBuffer[] toByteBuffers() throws IOException
ByteStore
Integer.MAX_VALUE
, more than one will be
required. The limit of each buffer indicates the
number of bytes it contains.
Usual usage will be to write all data, then call this method once; this model may affect implementation decisions about efficiency.
toByteBuffers
in interface ByteStore
IOException
- if there is an I/O errorCopyright © 2024 Central Laboratory of the Research Councils. All Rights Reserved.