/* * @(#)InputSourceStream.java 1.3 02/08/21 * * Copyright (c) 1996-2002 Sun Microsystems, Inc. All rights reserved. */ package javax.media.protocol; import java.io.InputStream; import java.io.IOException; /** * Build a source stream out of an input stream. * * @see DataSource * @see SourceStream * @see java.io.InputStream * * @version 1.3, 02/08/21. * */ public class InputSourceStream implements PullSourceStream { protected InputStream stream; protected boolean eosReached; ContentDescriptor contentType; /** * Construct an <CODE>InputSourceStream</CODE> from an input stream. * * @param s The input stream to build the source stream from. * @param type The content-type of the source stream. */ public InputSourceStream(InputStream s, ContentDescriptor type) { stream = s; eosReached = false; contentType = type; } /** * Get the content type for this stream. * * @return content descriptor for the stream. */ public ContentDescriptor getContentDescriptor() { return contentType; } /** * Obtain the content length * * @return content length for this stream. */ public long getContentLength() { return SourceStream.LENGTH_UNKNOWN; } /** * Query if the next read will block. * * @return true if a read will block. */ public boolean willReadBlock() { if( eosReached == true) { return true; } else { try { return stream.available() == 0; } catch (IOException e) { return true; } } } /** * Read a buffer of data. * * @param buffer The buffer to read data into. * @param offset The offset into the buffer for reading. * @param length The number of bytes to read. * @return The number of bytes read or -1 indicating end-of-stream. */ public int read(byte[] buffer, int offset, int length) throws IOException { int bytesRead = stream.read(buffer, offset, length); if( bytesRead == -1) { eosReached = true; } return bytesRead; } /** * Turn the stream off. * * @exception IOException Thrown if there is a problem closing the stream. */ public void close() throws IOException { stream.close(); } /** * Return if the end of stream has been reached. * @return true if the end of the stream has been reached. */ // $jdr: This is a bug. Need to figure out // the "correct" way to determine, before a read // is done, if we're at EOS. public boolean endOfStream() { return eosReached; } /** * Returns an zero length array because no controls * are supported. * * @return a zero length <code>Object</code> array. */ public Object[] getControls() { return new Object[0]; } /** * Returns <code>null</code> because no controls are implemented. * * @return <code>null</code>. */ public Object getControl(String controlName) { return null; } }