| AutoResetObjectOutputStream.java |
/***************************************
* *
* JBoss: The OpenSource J2EE WebOS *
* *
* Distributable under LGPL license. *
* See terms of license at gnu.org. *
* *
***************************************/
package org.jboss.util.stream;
import java.io.ObjectOutputStream;
import java.io.IOException;
/**
* An <code>ObjectOutputStream</code> that will auto reset after <i>n</i>
* objects have been written to the underlying stream.
*
* <h3>Concurrency</h3>
* This class is <b>not</b> synchronized.
*
* @version <tt>$Revision: 1.1 $</tt>
* @author <a href="mailto:jason@planet57.com">Jason Dillon</a>
*/
public class AutoResetObjectOutputStream
extends ObjectOutputStreamAdapter
{
/** Number of objects to write before resetting. */
protected int after; // = 0
/** Number of objects written so far. */
protected int count; // = 0
/**
* Construct a new AutoResetObjectOutputStream.
*
* @param out An ObjectOutputStream stream.
* @param after Number of objects to write before resetting.
*
* @throws IllegalArgumentException After <= 0
* @throws IOException Any exception thrown by
* the underlying OutputStream.
*/
public AutoResetObjectOutputStream(ObjectOutputStream out, int after)
throws IOException
{
super(out);
setResetAfter(after);
}
/**
* Set the number of objects that must be written before resetting
* the stream.
*
* @param after Number of objects to write before resetting.
*
* @throws IllegalArgumentException After <= 0
*/
public void setResetAfter(int after) {
if (after <= 0)
throw new IllegalArgumentException("after <= 0");
this.after = after;
}
/**
* Get the number of objects that must be written before resetting
* the stream.
*
* @return Number of objects to write before resetting.
*/
public final int getResetAfter() {
return after;
}
/**
* Get the number of objects written to the stream so far.
*
* @return The number of objects written to the stream so far.
*/
public final int getCount() {
return count;
}
/**
* Write the given object and reset if the number of objects written
* (including this one) exceeds the after count.
*
* @param obj Object to write.
*
* @throws IOException Any exception thrown by the underlying stream.
*/
protected void writeObjectOverride(Object obj) throws IOException {
super.writeObjectOverride(obj);
count++;
if (count >= after) {
reset();
}
}
/**
* Resets the object counter as well as the nested stream.
*
* @throws IOException
*/
public void reset() throws IOException {
out.reset();
count = 0;
}
}
| AutoResetObjectOutputStream.java |