@Internal public class RefCountedBufferingFileStream extends RefCountedFSOutputStream
RefCountedFileWithStream
that also uses an in-memory buffer for buffering small writes.
This is done to avoid frequent 'flushes' of the file stream to disk.Modifier and Type | Field and Description |
---|---|
static int |
BUFFER_SIZE |
Constructor and Description |
---|
RefCountedBufferingFileStream(RefCountedFileWithStream file,
int bufferSize) |
Modifier and Type | Method and Description |
---|---|
void |
close()
Closes the output stream.
|
void |
flush()
Flushes the stream, writing any data currently buffered in stream implementation to the
proper output stream.
|
File |
getInputFile()
Gets the underlying
File that allows to read the contents of the file. |
long |
getPos()
Gets the position of the stream (non-negative), defined as the number of bytes from the
beginning of the file to the current writing position.
|
int |
getReferenceCounter() |
boolean |
isClosed()
Checks if the file is closed for writes.
|
static RefCountedBufferingFileStream |
openNew(FunctionWithException<File,RefCountedFileWithStream,IOException> tmpFileProvider) |
boolean |
release()
Decreases the reference counter.
|
static RefCountedBufferingFileStream |
restore(FunctionWithException<File,RefCountedFileWithStream,IOException> tmpFileProvider,
File initialTmpFile) |
void |
retain()
Increases the reference counter.
|
void |
sync()
Flushes the data all the way to the persistent non-volatile storage (for example disks).
|
String |
toString() |
void |
write(byte[] b,
int off,
int len) |
void |
write(int b) |
write
public static final int BUFFER_SIZE
@VisibleForTesting public RefCountedBufferingFileStream(RefCountedFileWithStream file, int bufferSize)
public File getInputFile()
RefCountedFSOutputStream
File
that allows to read the contents of the file.getInputFile
in class RefCountedFSOutputStream
public long getPos()
FSDataOutputStream
This method must report accurately report the current position of the stream. Various components of the high-availability and recovery logic rely on the accurate
getPos
in class FSDataOutputStream
public void write(int b) throws IOException
write
in class OutputStream
IOException
public void write(byte[] b, int off, int len) throws IOException
write
in class OutputStream
IOException
public void flush() throws IOException
FSDataOutputStream
A completed flush does not mean that the data is necessarily persistent. Data persistence
can is only assumed after calls to FSDataOutputStream.close()
or FSDataOutputStream.sync()
.
Implementation note: This overrides the method defined in OutputStream
as abstract
to force implementations of the FSDataOutputStream
to implement this method directly.
flush
in interface Flushable
flush
in class FSDataOutputStream
IOException
- Thrown if an I/O error occurs while flushing the stream.public void sync() throws IOException
FSDataOutputStream
sync
in class FSDataOutputStream
IOException
- Thrown if an I/O error occurspublic boolean isClosed() throws IOException
RefCountedFSOutputStream
isClosed
in class RefCountedFSOutputStream
true
if the file is closed, false
otherwise.IOException
public void close()
FSDataOutputStream
class-level docs
.
The above implies that the method must block until persistence can be guaranteed. For
example for distributed replicated file systems, the method must block until the replication
quorum has been reached. If the calling thread is interrupted in the process, it must fail
with an IOException
to indicate that persistence cannot be guaranteed.
If this method throws an exception, the data in the stream cannot be assumed to be persistent.
Implementation note: This overrides the method defined in OutputStream
as abstract
to force implementations of the FSDataOutputStream
to implement this method directly.
close
in interface Closeable
close
in interface AutoCloseable
close
in class FSDataOutputStream
public void retain()
RefCounted
public boolean release()
RefCounted
true
if the reference counter reached 0, false
otherwise.@VisibleForTesting public int getReferenceCounter()
public static RefCountedBufferingFileStream openNew(FunctionWithException<File,RefCountedFileWithStream,IOException> tmpFileProvider) throws IOException
IOException
public static RefCountedBufferingFileStream restore(FunctionWithException<File,RefCountedFileWithStream,IOException> tmpFileProvider, File initialTmpFile) throws IOException
IOException
Copyright © 2014–2024 The Apache Software Foundation. All rights reserved.