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

📄 connectionbaseadapter.java

📁 用于移动设备上的java虚拟机源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    protected abstract void disconnect() throws IOException;    /**     * Reads up to <code>len</code> bytes of data from the input stream into     * an array of bytes, blocks until at least one byte is available.     *     * @param      b     the buffer into which the data is read.     * @param      off   the start offset in array <code>b</code>     *                   at which the data is written.     * @param      len   the maximum number of bytes to read.     * @return     the total number of bytes read into the buffer, or     *             <code>-1</code> if there is no more data because the end of     *             the stream has been reached.     * @exception  IOException  if an I/O error occurs.     */    protected abstract int readBytes(byte b[], int off, int len)        throws IOException;    /**     * Returns the number of bytes that can be read (or skipped over) from     * this input stream without blocking by the next caller of a method for     * this input stream.  The next caller might be the same thread or     * another thread. This classes implementation always returns     * <code>0</code>. It is up to subclasses to override this method.     *     * @return     the number of bytes that can be read from this input stream     *             without blocking.     * @exception  IOException  if an I/O error occurs.     */    public int available() throws IOException {        return 0;    }    /**     * Writes <code>len</code> bytes from the specified byte array     * starting at offset <code>off</code> to this output stream.     * <p>     * Polling the native code is done here to allow for simple     * asynchronous native code to be written. Not all implementations     * work this way (they block in the native code) but the same     * Java code works for both.     *     * @param      b     the data.     * @param      off   the start offset in the data.     * @param      len   the number of bytes to write.     * @return     number of bytes written     * @exception  IOException  if an I/O error occurs. In particular,     *             an <code>IOException</code> is thrown if the output     *             stream is closed.     */    protected abstract int writeBytes(byte b[], int off, int len)        throws IOException;    /**     * Forces any buffered output bytes to be written out.     * The general contract of <code>flush</code> is     * that calling it is an indication that, if any bytes previously     * written that have been buffered by the connection,     * should immediately be written to their intended destination.     * <p>     * The <code>flush</code> method of <code>ConnectionBaseAdapter</code>     * does nothing.     *     * @exception  IOException  if an I/O error occurs.     */    protected void flush() throws IOException {    }}/** * Input stream for the connection */class BaseInputStream extends InputStream {    /** Pointer to the connection */    private ConnectionBaseAdapter parent;    /** Buffer for single char reads */    byte[] buf = new byte[1];    /**     * Constructs a BaseInputStream for a ConnectionBaseAdapter.     *     * @param parent pointer to the connection object     *     * @exception  IOException  if an I/O error occurs.     */    BaseInputStream(ConnectionBaseAdapter parent) throws IOException {        this.parent = parent;    }    /**     * Check the stream is open     *     * @exception  InterruptedIOException  if it is not.     */    private void ensureOpen() throws InterruptedIOException {        if (parent == null) {            throw new InterruptedIOException("Stream closed");        }    }    /**     * Returns the number of bytes that can be read (or skipped over) from     * this input stream without blocking by the next caller of a method for     * this input stream.  The next caller might be the same thread or     * another thread.     *     * <p>The <code>available</code> method always returns <code>0</code> if     * {@link ConnectionBaseAdapter#available()} is     * not overridden by the subclass.     *     * @return     the number of bytes that can be read from this input stream     *             without blocking.     * @exception  IOException  if an I/O error occurs.     */    public int available() throws IOException {        ensureOpen();        return parent.available();    }    /**     * Reads the next byte of data from the input stream. The value byte is     * returned as an <code>int</code> in the range <code>0</code> to     * <code>255</code>. If no byte is available because the end of the stream     * has been reached, the value <code>-1</code> is returned. This method     * blocks until input data is available, the end of the stream is detected,     * or an exception is thrown.     *     * @return     the next byte of data, or <code>-1</code> if the end of the     *             stream is reached.     * @exception  IOException  if an I/O error occurs.     */    public int read() throws IOException {        if (read(buf, 0, 1) > 0) {            return (buf[0] & 0xFF);        }        return -1;    }    /**     * Reads up to <code>len</code> bytes of data from the input stream into     * an array of bytes.  An attempt is made to read as many as     * <code>len</code> bytes, but a smaller number may be read, possibly     * zero. The number of bytes actually read is returned as an integer.     *     * <p> This method blocks until input data is available, end of file is     * detected, or an exception is thrown.     *     * <p> If <code>b</code> is <code>null</code>, a     * <code>NullPointerException</code> is thrown.     *     * <p> If <code>off</code> is negative, or <code>len</code> is negative, or     * <code>off+len</code> is greater than the length of the array     * <code>b</code>, then an <code>IndexOutOfBoundsException</code> is     * thrown.     *     * <p> If <code>len</code> is zero, then no bytes are read and     * <code>0</code> is returned; otherwise, there is an attempt to read at     * least one byte. If no byte is available because the stream is at end of     * file, the value <code>-1</code> is returned; otherwise, at least one     * byte is read and stored into <code>b</code>.     *     * <p> The first byte read is stored into element <code>b[off]</code>, the     * next one into <code>b[off+1]</code>, and so on. The number of bytes read     * is, at most, equal to <code>len</code>. Let <i>k</i> be the number of     * bytes actually read; these bytes will be stored in elements     * <code>b[off]</code> through <code>b[off+</code><i>k</i><code>-1]</code>,     * leaving elements <code>b[off+</code><i>k</i><code>]</code> through     * <code>b[off+len-1]</code> unaffected.     *     * <p> In every case, elements <code>b[0]</code> through     * <code>b[off]</code> and elements <code>b[off+len]</code> through     * <code>b[b.length-1]</code> are unaffected.     *     * <p> If the first byte cannot be read for any reason other than end of     * file, then an <code>IOException</code> is thrown. In particular, an     * <code>IOException</code> is thrown if the input stream has been closed.     *     * @param      b     the buffer into which the data is read.     * @param      off   the start offset in array <code>b</code>     *                   at which the data is written.     * @param      len   the maximum number of bytes to read.     * @return     the total number of bytes read into the buffer, or     *             <code>-1</code> if there is no more data because the end of     *             the stream has been reached.     * @exception  IOException  if an I/O error occurs.     * @see        java.io.InputStream#read()     */    public int read(byte b[], int off, int len) throws IOException {        int test;        ensureOpen();        if (len == 0) {            return 0;        }        /*         * test the parameters so the subclass will not have to.         * this will avoid crashes in the native code         */        test = b[off] + b[len - 1] + b[off + len - 1];        return parent.readBytes(b, off, len);    }    /**     * Closes this input stream and releases any system resources associated     * with the stream.     *     * @exception  IOException  if an I/O error occurs.     */    public void close() throws IOException {        if (parent != null) {            parent.closeInputStream();            parent = null;        }    }}/** * Output stream for the connection */class BaseOutputStream extends OutputStream {    /** Pointer to the connection */    ConnectionBaseAdapter parent;    /** Buffer for single char writes */    byte[] buf = new byte[1];    /**     * Constructs a BaseOutputStream for an ConnectionBaseAdapter.     *     * @param p parent connection     */    BaseOutputStream(ConnectionBaseAdapter p) {        parent = p;    }    /**     * Check the stream is open     *     * @exception  InterruptedIOException  if it is not.     */    private void ensureOpen() throws InterruptedIOException {        if (parent == null) {            throw new InterruptedIOException("Stream closed");        }    }    /**     * Writes the specified byte to this output stream. The general     * contract for <code>write</code> is that one byte is written     * to the output stream. The byte to be written is the eight     * low-order bits of the argument <code>b</code>. The 24     * high-order bits of <code>b</code> are ignored.     *     * @param      b   the <code>byte</code>.     * @exception  IOException  if an I/O error occurs. In particular,     *             an <code>IOException</code> may be thrown if the     *             output stream has been closed.     */    public void write(int b) throws IOException {        buf[0] = (byte)b;        write(buf, 0, 1);    }    /**     * Writes <code>len</code> bytes from the specified byte array     * starting at offset <code>off</code> to this output stream.     * The general contract for <code>write(b, off, len)</code> is that     * some of the bytes in the array <code>b</code> are written to the     * output stream in order; element <code>b[off]</code> is the first     * byte written and <code>b[off+len-1]</code> is the last byte written     * by this operation.     * <p>     * If <code>b</code> is <code>null</code>, a     * <code>NullPointerException</code> is thrown.     * <p>     * If <code>off</code> is negative, or <code>len</code> is negative, or     * <code>off+len</code> is greater than the length of the array     * <code>b</code>, then an <tt>IndexOutOfBoundsException</tt> is thrown.     *     * @param      b     the data.     * @param      off   the start offset in the data.     * @param      len   the number of bytes to write.     * @exception  IOException  if an I/O error occurs. In particular,     *             an <code>IOException</code> is thrown if the output     *             stream is closed.     */    public void write(byte b[], int off, int len)           throws IOException {        int test;        int bytesWritten;        ensureOpen();        if (len == 0) {            return;        }        /*         * test the parameters here so subclases do not have to,         * this will avoid a crash in the native code         */        test = b[off] + b[len - 1] + b[off + len - 1];        /*         * Polling the native code is done here to allow for simple         * asynchronous native code to be written. Not all implementations         * work this way (they block in the native code) but the same         * Java code works for both.         */        for (bytesWritten = 0; ; ) {            try {                bytesWritten += parent.writeBytes(b, off + bytesWritten,                                                  len - bytesWritten);            } finally {                if (parent == null) {                    throw new InterruptedIOException("Stream closed");                }            }            if (bytesWritten == len) {                break;            }                        GeneralBase.iowait();         }    }    /**     * Flushes this output stream and forces any buffered output bytes     * to be written out. The general contract of <code>flush</code> is     * that calling it is an indication that, if any bytes previously     * written have been buffered by the implementation of the output     * stream, such bytes should immediately be written to their     * intended destination.     *     * @exception  IOException  if an I/O error occurs.     */    public void flush() throws IOException {        ensureOpen();        parent.flush();    }    /**     * Closes this output stream and releases any system resources     * associated with this stream. The general contract of <code>close</code>     * is that it closes the output stream. A closed stream cannot perform     * output operations and cannot be reopened.     *     * @exception  IOException  if an I/O error occurs.     */    public void close() throws IOException {        if (parent != null) {            parent.closeOutputStream();            parent = null;        }    }}        

⌨️ 快捷键说明

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