blob: 759ebbfda8ac55c54dd8f797b15c43293f353310 [file] [log] [blame] [raw]
package li.cil.oc.api.fs;
import java.io.IOException;
/**
* Represents a handle to a file opened from a {@link FileSystem}.
*/
public interface Handle {
/**
* The current position in the file.
*/
long position();
/**
* The total length of the file.
*/
long length();
/**
* Closes the handle.
* <p/>
* For example, if there is an underlying stream, this should close that
* stream. Any future calls to {@link #read} or {@link #write} should throw
* an <tt>IOException</tt> after this function was called.
*/
void close();
/**
* Tries to read as much data from the file as fits into the specified
* array.
* <p/>
* For files opened in write or append mode this should always throw an
* exception.
*
* @param into the buffer to read the data into.
* @return the number of bytes read; -1 if there are no more bytes (EOF).
* @throws IOException if the file was opened in writing mode or an
* I/O error occurred or the file was already
* closed.
*/
int read(byte[] into) throws IOException;
/**
* Jump to the specified position in the file, if possible.
* <p/>
* For files opened in write or append mode this should always throw an
* exception.
*
* @param to the position in the file to jump to.
* @return the resulting position in the file.
* @throws IOException if the file was opened in write mode.
*/
long seek(long to) throws IOException;
/**
* Tries to write all the data from the specified array into the file.
* <p/>
* For files opened in read mode this should always throw an exception.
*
* @param value the data to write into the file.
* @throws IOException if the file was opened in read-only mode, or
* another I/O error occurred (no more space,
* for example), or the file was already closed.
*/
void write(byte[] value) throws IOException;
}