read
public abstract int read()
                  throws IOExceptionReads the next byte of data from the input stream. The value byte is returned as an int in the range 0 to 255. If no byte is available because the end of the stream has been reached, the value -1 is returned. This method blocks until input data is available, the end of the stream is detected, or an exception is thrown. 
A subclass must provide an implementation of this method. 当然是它子类啦java.lang.Object
  java.io.InputStream
      java.io.ByteArrayInputStream
ByteArrayInputStream类实现继承
并实现read()

解决方案 »

  1.   

    ? 007remember(绿原) 
    子类实现我知道啊,可是system类里怎么实现了?
    它只是做了初始化public final static InputStream in = nullInputStream();得到的是一个null,没有创建一个实现了InputStream类的实例啊,还是不明白,再讲讲,谢谢!
      

  2.   

    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    int i=br.read();
      

  3.   

    ?楼上的,我问的是system.in.read(), 比如:while((data=System.in.read())!=-1),这里的read()在哪里实现的?
      

  4.   

    System.in是一个InputStream类的对象,首先初始化时调用System.nullInputStream()把in初始化为null,此后为了初始化System类,调用System.initializeSystemClass(),这个方法会调用
    setIn0(new BufferedInputStream(fdIn)),
    private static native void setIn0(InputStream in)是一个本地方法,我们看不到源代码,
    总之in会是一个InputStream类的子类的对象,这个赋值动作应该在setIn0里实现的吧
      

  5.   

    java.lang.Object
      java.io.InputStream
    Direct Known Subclasses: 
    AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream A subclass must provide an implementation of this method. 当然是它子类啦
      

  6.   

    /*
     * @(#)ByteArrayInputStream.java 1.42 03/01/23
     *
     * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
     * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
     */package java.io;/**
     * A <code>ByteArrayInputStream</code> contains
     * an internal buffer that contains bytes that
     * may be read from the stream. An internal
     * counter keeps track of the next byte to
     * be supplied by the <code>read</code> method.
     * <p>
     * Closing a <tt>ByteArrayInputStream</tt> has no effect. The methods in
     * this class can be called after the stream has been closed without
     * generating an <tt>IOException</tt>.
     *
     * @author  Arthur van Hoff
     * @version 1.42, 01/23/03
     * @see     java.io.StringBufferInputStream
     * @since   JDK1.0
     */
    public
    class ByteArrayInputStream extends InputStream {    /**
         * An array of bytes that was provided
         * by the creator of the stream. Elements <code>buf[0]</code>
         * through <code>buf[count-1]</code> are the
         * only bytes that can ever be read from the
         * stream;  element <code>buf[pos]</code> is
         * the next byte to be read.
         */    /**
         * Reads the next byte of data from this 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. 
         * <p>
         * This <code>read</code> method 
         * cannot block. 
         *
         * @return  the next byte of data, or <code>-1</code> if the end of the
         *          stream has been reached.
         */
        public synchronized int read() {
    return (pos < count) ? (buf[pos++] & 0xff) : -1;
        }    /**
         * Reads up to <code>len</code> bytes of data into an array of bytes 
         * from this input stream. 
         * If <code>pos</code> equals <code>count</code>,
         * then <code>-1</code> is returned to indicate
         * end of file. Otherwise, the  number <code>k</code>
         * of bytes read is equal to the smaller of
         * <code>len</code> and <code>count-pos</code>.
         * If <code>k</code> is positive, then bytes
         * <code>buf[pos]</code> through <code>buf[pos+k-1]</code>
         * are copied into <code>b[off]</code>  through
         * <code>b[off+k-1]</code> in the manner performed
         * by <code>System.arraycopy</code>. The
         * value <code>k</code> is added into <code>pos</code>
         * and <code>k</code> is returned.
         * <p>
         * This <code>read</code> method cannot block. 
         *
         * @param   b     the buffer into which the data is read.
         * @param   off   the start offset of the data.
         * @param   len   the maximum number of bytes 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.
         */
        public synchronized int read(byte b[], int off, int len) {
    if (b == null) {
        throw new NullPointerException();
    } else if ((off < 0) || (off > b.length) || (len < 0) ||
       ((off + len) > b.length) || ((off + len) < 0)) {
        throw new IndexOutOfBoundsException();
    }
    if (pos >= count) {
        return -1;
    }
    if (pos + len > count) {
        len = count - pos;
    }
    if (len <= 0) {
        return 0;
    }
    System.arraycopy(buf, pos, b, off, len);
    pos += len;
    return len;
        }    /**
         * Skips <code>n</code> bytes of input from this input stream. Fewer 
         * bytes might be skipped if the end of the input stream is reached. 
         * The actual number <code>k</code>
         * of bytes to be skipped is equal to the smaller
         * of <code>n</code> and  <code>count-pos</code>.
         * The value <code>k</code> is added into <code>pos</code>
         * and <code>k</code> is returned.
         *
         * @param   n   the number of bytes to be skipped.
         * @return  the actual number of bytes skipped.
         */
        public synchronized long skip(long n) {
    if (pos + n > count) {
        n = count - pos;
    }
    if (n < 0) {
        return 0;
    }
    pos += n;
    return n;
        }
      

  7.   

    听 TRUENO(AE86)一讲仿佛明白了好多,呵呵,谢谢啊,还有007remember(绿原)你说的ByteArrayInputStream实现了read()我知道是对的,但你没明白我的意思,我不是问这个,我问的是system类在哪里使用比如你说的子类实现了read()。