package com.googlecode.mp4parser; import java.io.Closeable; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.WritableByteChannel; public interface DataSource extends Closeable { /** * Reads a sequence of bytes from this channel into the given buffer. * <p/> * <p> Bytes are read starting at this channel's current position, and * then the file position is updated with the number of bytes actually * read. </p> */ int read(ByteBuffer byteBuffer) throws IOException; /** * Returns the current size of this DataSource. </p> * * @return The current size of this DataSource, * measured in bytes * @throws IOException If some I/O error occurs */ long size() throws IOException; /** * Returns the DataSource's current position. * @return This DataSource's file position, * a non-negative integer counting the number of bytes * from the beginning of the data to the current position * @throws IOException */ long position() throws IOException; /** * Sets the DataSource's position. * * @param nuPos The new position, a non-negative integer counting * the number of bytes from the beginning of the data * @throws IOException If some I/O error occurs */ void position(long nuPos) throws IOException; /** * Transfers bytes from this DataSource to the given writable byte * channel. * * <p> An attempt should be made to read up to <tt>count</tt> bytes starting at * the given <tt>position</tt> in this DataSource and write them to the * target channel. An invocation of this method may or may not transfer * all of the requested bytes; * * @param position * The position within the DataSource at which the transfer is to begin; * must be non-negative * * @param count * The maximum number of bytes to be transferred; must be * non-negative * * @param target * The target channel * @return the actual number of bytes written * @throws IOException */ long transferTo(long position, long count, WritableByteChannel target) throws IOException; /** * * @param startPosition * @param size * @return * @throws IOException */ ByteBuffer map(long startPosition, long size) throws IOException; void close() throws IOException; }