org.mp4parser.muxer.DataSource Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of muxer Show documentation
Show all versions of muxer Show documentation
This package has a focus on file operation. It can read A/V data from Random Access Datasources
package org.mp4parser.muxer;
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.
* Bytes are read starting at this channel's current position, and
* then the file position is updated with the number of bytes actually
* read.
*
* @param byteBuffer sink for this read operation
* @return number of bytes actually read
* @throws IOException If some I/O error occurs
*/
int read(ByteBuffer byteBuffer) throws IOException;
/**
* Returns the current size of this DataSource.
*
* @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 If some I/O error occurs
*/
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.
*
* An attempt should be made to read up to count bytes starting at
* the given position 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 If some I/O error occurs
*/
long transferTo(long position, long count, WritableByteChannel target) throws IOException;
/**
* Maps a part of this DataSource
into a ByteBuffer
. It might utilize
* an operating system supported memory mapped file or potentially just reads the requested
* portion of the file into the memory.
*
* @param startPosition where the requested block start
* @param size size of the requested block
* @return the requested portion of the DataSource
* @throws IOException If some I/O error occurs
*/
ByteBuffer map(long startPosition, long size) throws IOException;
/**
* Tries to free all resources.
*
* @throws IOException If some I/O error occurs
*/
void close() throws IOException;
}