⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bytestream.java

📁 It is Java for SIP phone
💻 JAVA
字号:
/* * ByteStream.java * * Created on March 20, 2003, 10:56 AM */package gov.nist.media.protocol.live;import java.io.IOException;import javax.media.protocol.ContentDescriptor;import javax.media.protocol.PullSourceStream;import javax.media.protocol.Seekable;/** * A stream who read directly from an array of byte * This Stream allow one to play or play back a buffer filled by MPEG_AUDIO * or GSM audio data * @author Jean Deruelle <jean.deruelle@nist.gov> * * <a href="{@docRoot}/uncopyright.html">This code is in the public domain.</a> */public class ByteStream implements PullSourceStream, Seekable  {        	protected byte[] data;	protected int position=0;	protected boolean started;		/** 	 * Creates a new instance of ByteStream	 */ 	public ByteStream(byte[] byteBuffer) {				data=byteBuffer;		this.seek((long)(0)); // set the ByteBuffer to to beginning		}	/**	 * Find out if the end of the stream has been reached.	 *	 * @return Returns <CODE>true</CODE> if there is no more data.	 */	public boolean endOfStream() {				if(data.length-position>=0)			return false;		return true;	}	/**	 * Get the current content type for this stream.	 *	 * @return The current <CODE>ContentDescriptor</CODE> for this stream.	 */	public ContentDescriptor getContentDescriptor() {		return null;	}	/**	 * Get the size, in bytes, of the content on this stream.	 *	 * @return The content length in bytes.	 */	public long getContentLength() {				if(data==null)			return 0;		return data.length;	}		/**	 * Obtain the object that implements the specified	 * <code>Class</code> or <code>Interface</code>	 * The full class or interface name must be used.	 * <p>	 *	 * The control is not supported.	 * <code>null</code> is returned.	 *	 * @return <code>null</code>.	 */	public Object getControl(String controlType) {		try {		  Class  cls = Class.forName(controlType);		  Object cs[] = getControls();		  for (int i = 0; i < cs.length; i++) {			 if (cls.isInstance(cs[i]))				return cs[i];		  }		  return null;	   } 	   catch (Exception e) {   // no such controlType or such control		 return null;	   }	}	/**	 * Obtain the collection of objects that	 * control the object that implements this interface.	 * <p>	 *	 * No controls are supported.	 * A zero length array is returned.	 *	 * @return A zero length array	 */	public Object[] getControls() {		Object[] objects = new Object[0];		return objects;	}	/**	 * Find out if this media object can position anywhere in the	 * stream. If the stream is not random access, it can only be repositioned	 * to the beginning.	 *	 * @return Returns <CODE>true</CODE> if the stream is random access, <CODE>false</CODE> if the stream can only	 * be reset to the beginning.	 */	public boolean isRandomAccess() {		return true;	}	/**	 * Block and read data from the stream.	 * <p>	 * Reads up to <CODE>length</CODE> bytes from the input stream into	 * an array of bytes.	 * If the first argument is <code>null</code>, up to	 * <CODE>length</CODE> bytes are read and discarded.	 * Returns -1 when the end	 * of the media is reached.	 *	 * This method  only returns 0 if it was called with	 * a <CODE>length</CODE> of 0.	 *	 * @param buffer The buffer to read bytes into.	 * @param offset The offset into the buffer at which to begin writing data.	 * @param length The number of bytes to read.	 * @return The number of bytes read, -1 indicating	 * the end of stream, or 0 indicating <CODE>read</CODE>	 * was called with <CODE>length</CODE> 0.	 * @throws IOException Thrown if an error occurs while reading.	 */	public int read(byte[] buffer, int offset, int length) throws IOException {    		// return n (number of bytes read), -1 (eof), 0 (asked for zero bytes)    			if ( length == 0 )			return 0;		if(data==null)			return 0;		try {						for (int i = offset; i < offset + length; i++)					 buffer[i] = data[position++]; 			return length;		}		catch ( IndexOutOfBoundsException E ) {			return -1;		}	}	 public void close()  {  	 		 	data=null;  		 }	/**	 * Seek to the specified point in the stream.	 * @param where The position to seek to.	 * @return The new stream position.	 */	public long seek(long where) {		try {						position=(int)(where);			return where;		}		catch (IllegalArgumentException E) {			return this.tell(); // staying at the current position		}	 }	/**	 * Obtain the current point in the stream.	 */	public long tell() {				return position;	}	/**	 * Find out if data is available now.	 * Returns <CODE>true</CODE> if a call to <CODE>read</CODE> would block	 * for data.	 *	 * @return Returns <CODE>true</CODE> if read would block; otherwise	 * returns <CODE>false</CODE>.	 */	public boolean willReadBlock() {	   	   if(position<data.length)			return false;	   return true;	}	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -