/* * @(#)PullBufferStream.java 1.8 02/08/21 * * Copyright (c) 1996-2002 Sun Microsystems, Inc. All rights reserved. */ package javax.media.protocol; import java.io.*; import javax.media.Buffer; /** * Abstracts a read interface that data is pulled from in the form of Buffer objects * This interface allows a sourcestream to transfer data in the form * of an entire media chunk to the user of this sourcestream. The * media object or chunk transferred is the Buffer object as defined in * javax.media.Buffer. The user of the stream will allocate an empty Buffer * object and pass this over to the sourcestream in the read() method. * The source of the stream will allocate the Buffer object's data and * header, set them on the Buffer and send them over to the user. * * The structure of the data and header of the Buffer object is * determined by the format attribute of the Buffer object or the content * type of the sourcestream<BR><BR> * * It is possible for the user of the stream to indicate to the * sourcestream to NOT allocate the data object, but to * instead use the data passed in the read() method. In this case, * the user must pass non null data object to the stream in the Buffer * object. The type of data can be determined by the getDataType() * method on the format object returned by calling <code>getFormat</code> on * this bufferstream. The <code>getDataType</code> method will return a Class * describing the Buffer's data and can be used by the stream user to allocate its * own data and hand it over to the read method. * * @see javax.media.Format * @see javax.media.Buffer * @see PullBufferDataSource * @since JMF 2.0 */ public interface PullBufferStream extends SourceStream { /** * Find out if data is available now. * Returns <CODE>true</CODE> if a call to <CODE>read</CODE> would block * for data. * * @return <CODE>true</CODE> if read would block; otherwise * returns <CODE>false</CODE>. */ public boolean willReadBlock(); /** * Block and read a buffer from the stream. <code>buffer</code> should * be non-null. * <p> * @throws IOException Thrown if an error occurs while reading. */ public void read(Buffer buffer)throws IOException; /** * Get the format type of the data that this source stream provides. * @return A <CODE>Format</CODE> object that describes the data in this stream. */ public javax.media.Format getFormat(); }