/* * @(#)CachedStream.java 1.4 02/08/21 * * Copyright (c) 1996-2002 Sun Microsystems, Inc. All rights reserved. */ package javax.media.protocol; /** * This interface is implemented by a <code>SourceStream</code> that caches * downloaded data for fast delivery to the handler. It provides control * over enabling/disabling the buffering and provides a way to query if * a certain number of bytes are available to be read from the stream. * <P> * Buffering here refers to jitter-buffering. Buffering is normally enabled. * It enables smooth playback even if the incoming data rate fluctuates. * The amount of buffering is implementation dependant. * <P> * When parsing the header of a media file, the parser * may want to read a few bytes to check for say a valid * magic header; if the magic header is illegal, the * parser can throw a BadHeaderException. The parser * may build several tables and extract media track * information. * <P> * The parser typically doen't need to wait for the buffers to be * filled. * So it is desirable to turn off buffering when parsing the * header and turn it on after the header is read. * This won't have any effect on playback smoothness * since playback cannot start until the header is parsed. * * @see PullSourceStream * @see PushSourceStream * @since JMF 2.0 */ public interface CachedStream { /** * This method is used by the parser to turn off buffering * while the header is being read. Buffering is on by default. */ void setEnabledBuffering(boolean b); /** * Tells if buffering is currently enabled or not. */ boolean getEnabledBuffering(); /** * Will seek to offset and read numBytes block? * Will return true unless numBytes bytes can be * read in one <code>read</code> call. */ boolean willReadBytesBlock(long offset, int numBytes); /** * Will read numBytes block? * Will return true unless numBytes bytes can be * read in one <code>read</code> call. */ boolean willReadBytesBlock(int numBytes); /** * Aborts a read if it is in progress. */ void abortRead(); }