/* This code is part of Freenet. It is distributed under the GNU General * Public License, version 2 (or at your option any later version). See * http://www.gnu.org/ for further details of the GPL. */ package freenet.support.io; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Serializable; import freenet.client.async.ClientContext; import freenet.support.api.Bucket; import freenet.support.api.LockableRandomAccessBuffer; import freenet.support.api.RandomAccessBucket; public class NullBucket implements Bucket, Serializable, RandomAccessBucket { private static final long serialVersionUID = 1L; public static final OutputStream nullOut = new NullOutputStream(); public static final InputStream nullIn = new NullInputStream(); public final long length; public NullBucket() { this(0); } public NullBucket(long length) { this.length = length; } /** * Returns an OutputStream that is used to put data in this Bucket. **/ @Override public OutputStream getOutputStream() { return nullOut; } @Override public OutputStream getOutputStreamUnbuffered() { return nullOut; } /** * Returns an InputStream that reads data from this Bucket. If there is * no data in this bucket, null is returned. **/ @Override public InputStream getInputStream() { return nullIn; } @Override public InputStream getInputStreamUnbuffered() { return nullIn; } /** * Returns the amount of data currently in this bucket. **/ @Override public long size() { return length; } /** Returns the name of this NullBucket. */ @Override public String getName() { return "President George W. NullBucket"; } @Override public boolean isReadOnly() { return false; } @Override public void setReadOnly() { // Do nothing } @Override public void free() { // Do nothing } @Override public RandomAccessBucket createShadow() { return new NullBucket(); } @Override public void onResume(ClientContext context) { // Do nothing. } @Override public void storeTo(DataOutputStream dos) throws IOException { throw new UnsupportedOperationException(); } @Override public LockableRandomAccessBuffer toRandomAccessBuffer() throws IOException { return new NullRandomAccessBuffer(length); } }