Top Description Fields Constructors Methods
org.apache.commons.io.output

public Class DeferredFileOutputStream

extends ThresholdingOutputStream
Class Inheritance
Imports
java.io.File, .FileInputStream, .FileOutputStream, .IOException, .OutputStream, org.apache.commons.io.IOUtils

An output stream which will retain data in memory until a specified threshold is reached, and only then commit it to disk. If the stream is closed before the threshold is reached, the data will not be written to disk at all.

This class originated in FileUpload processing. In this use case, you do not know in advance the size of the file being uploaded. If the file is small you want to store it in memory (for speed), but if the file is large you want to store it to file (to avoid memory issues).

Authors
Martin Cooper, gaxzerow
Version
$Id: DeferredFileOutputStream.java 437567 2006-08-28 06:39:07Z bayard $

Field Summary

Modifier and TypeField and Description
private boolean
closed

True when close() has been called successfully.

private OutputStream
currentOutputStream

The output stream to which data will be written at any given time.

private ByteArrayOutputStream
memoryOutputStream

The output stream to which data will be written prior to the theshold being reached.

private File
outputFile

The file to which output will be directed if the threshold is exceeded.

Constructor Summary

AccessConstructor and Description
public
DeferredFileOutputStream(int
The number of bytes at which to trigger an event.
threshold
,
File
The file to which data is saved beyond the threshold.
outputFile
)

Constructs an instance of this class which will trigger an event at the specified threshold, and save data to a file beyond that point.

Method Summary

Modifier and TypeMethod and Description
public void
close()

Overrides org.apache.commons.io.output.ThresholdingOutputStream.close.

Implements java.io.Closeable.close.

Closes underlying output stream, and mark this as closed
public byte[]

Returns:

The data for this output stream, or null if no such data is available.
getData
()

Returns the data for this output stream as an array of bytes, assuming that the data has been retained in memory.

public File

Returns:

The file for this output stream, or null if no such file exists.
getFile
()

Returns the same output file specified in the constructor, even when threashold has not been reached.

protected OutputStream

Returns:

The underlying output stream.
getStream
()

Implements abstract org.apache.commons.io.output.ThresholdingOutputStream.getStream.

Returns the current output stream.
public boolean

Returns:

true if the data is available in memory; false otherwise.
isInMemory
()

Determines whether or not the data for this output stream has been retained in memory.

protected void
thresholdReached()

Implements abstract org.apache.commons.io.output.ThresholdingOutputStream.thresholdReached.

Switches the underlying output stream from a memory based stream to one that is backed by disk.
public void
writeTo(OutputStream
output stream to write to.
out
)

Writes the data from this output stream to the specified output stream, after it has been closed.

Inherited from org.apache.commons.io.output.ThresholdingOutputStream:
checkThresholdflushgetByteCountgetThresholdisThresholdExceededwritewritewrite

Field Detail

closedback to summary
private boolean closed

True when close() has been called successfully.

currentOutputStreamback to summary
private OutputStream currentOutputStream

The output stream to which data will be written at any given time. This will always be one of memoryOutputStream or diskOutputStream.

memoryOutputStreamback to summary
private ByteArrayOutputStream memoryOutputStream

The output stream to which data will be written prior to the theshold being reached.

outputFileback to summary
private File outputFile

The file to which output will be directed if the threshold is exceeded.

Constructor Detail

DeferredFileOutputStreamback to summary
public DeferredFileOutputStream(int threshold, File outputFile)

Constructs an instance of this class which will trigger an event at the specified threshold, and save data to a file beyond that point.

Parameters
threshold:int

The number of bytes at which to trigger an event.

outputFile:File

The file to which data is saved beyond the threshold.

Method Detail

closeback to summary
public void close() throws IOException

Overrides org.apache.commons.io.output.ThresholdingOutputStream.close.

Implements java.io.Closeable.close.

Closes underlying output stream, and mark this as closed

Exceptions
IOException:
if an error occurs.
getDataback to summary
public byte[] getData()

Returns the data for this output stream as an array of bytes, assuming that the data has been retained in memory. If the data was written to disk, this method returns null.

Returns:byte[]

The data for this output stream, or null if no such data is available.

getFileback to summary
public File getFile()

Returns the same output file specified in the constructor, even when threashold has not been reached.

Returns:File

The file for this output stream, or null if no such file exists.

getStreamback to summary
protected OutputStream getStream() throws IOException

Implements abstract org.apache.commons.io.output.ThresholdingOutputStream.getStream.

Returns the current output stream. This may be memory based or disk based, depending on the current state with respect to the threshold.

Returns:OutputStream

The underlying output stream.

Exceptions
IOException:
if an error occurs.
isInMemoryback to summary
public boolean isInMemory()

Determines whether or not the data for this output stream has been retained in memory.

Returns:boolean

true if the data is available in memory; false otherwise.

thresholdReachedback to summary
protected void thresholdReached() throws IOException

Implements abstract org.apache.commons.io.output.ThresholdingOutputStream.thresholdReached.

Switches the underlying output stream from a memory based stream to one that is backed by disk. This is the point at which we realise that too much data is being written to keep in memory, so we elect to switch to disk-based storage.

Exceptions
IOException:
if an error occurs.
writeToback to summary
public void writeTo(OutputStream out) throws IOException

Writes the data from this output stream to the specified output stream, after it has been closed.

Parameters
out:OutputStream

output stream to write to.

Exceptions
IOException:
if this stream is not yet closed or an error occurs.