/* * This file is part of muCommander, http://www.mucommander.com * Copyright (C) 2002-2016 Maxence Bernard * * muCommander is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * muCommander is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.mucommander.commons.io; import java.io.IOException; import java.io.OutputStream; /** * <code>RandomAccessOutputStream</code> is an <code>OutputStream</code> with random access. * * <b>Important:</b> <code>BufferedOutputStream</code> or any class wrapping a standard <code>OutputStream</code> * and using an internal buffer CANNOT be used with a <code>RandomAccessInputStream</code> if the {@link #seek(long)} * method is to be used. Doing so would corrupt the write buffer and yield to data inconsistencies. * {@link BufferedRandomOutputStream} provides safe buffering to RandomAccessOutputStream. * * @author Maxence Bernard */ public abstract class RandomAccessOutputStream extends OutputStream implements RandomAccess { /** * Creates a new RandomAccessOutputStream. */ public RandomAccessOutputStream() { } ////////////////////// // Abstract methods // ////////////////////// /** * Writes <code>b.length</code> bytes from the specified byte array to this file, starting at the current file offset. * * @param b the data to write * @throws IOException if an I/O error occurs */ @Override public abstract void write(byte b[]) throws IOException; /** * Writes <code>len</code> bytes from the specified byte array starting at offset <code>off</code> to this file. * * @param b the data to write * @param off the start offset in the data array * @param len the number of bytes to write * @throws IOException if an I/O error occurs */ @Override public abstract void write(byte b[], int off, int len) throws IOException; /** * Sets the length of the file. * * <p>If the present length of the file as returned by the {@link #getLength()} method is greater than the * <code>newLength</code> argument then the file will be truncated. In this case, if the file offset as returned * by the {@link #getOffset()} method is greater than <code>newLength</code> then the * offset will be equal to <code>newLength</code> after this method returns .</p> * * <p>If the present length of the file as returned by the {@link #getLength()} method is smaller than the * <code>newLength</code> argument then the file will be extended. In this case, the contents of the extended * portion of the file are not defined.</p> * * @param newLength the new file's length * @throws IOException If an I/O error occurred while trying to change the file's length */ public abstract void setLength(long newLength) throws IOException; /** * Closes this stream and releases any system resources associated with the stream. * A closed stream cannot perform output operations and cannot be reopened. * * @throws IOException if an I/O error occurs. */ @Override public abstract void close() throws IOException; }