黑马程序员技术交流社区

标题: 关于IO流中的read()方法 [打印本页]

作者: 马蚁牙黑    时间: 2016-8-22 23:54
标题: 关于IO流中的read()方法
FileInputStream中的read()方法是对抽象类InputStream中read()的实现,还是自己另定义了一个read()方法呢求解
作者: bin931207    时间: 2016-8-23 01:17
FileInputStream把InputStream的read方法继承了。
作者: 冬天有点冷    时间: 2016-8-23 01:49
InputStream  中的read()方法根据底层代码可以看出是没有定义方法体的抽象方法,  FileInputStream子类继承了父类的这个方法, 并写重写了这个方法,定义了方法体.
作者: 1344667911    时间: 2016-8-23 09:48
是继承父类的.要重写
作者: wq1194165366    时间: 2016-8-23 12:21
[AppleScript] 纯文本查看 复制代码
 
/*
这是FileInputStream底层的关于read()方法的源码,也就是说FileInputStream继承了InputStream,并且在底层重写了InputStream中的read方法,在调用的时候,,底层已经帮你把read方法给写好了,就没必要纠结要不要去重写read方法了,个人理解

*/
public int read() throws IOException {
        Object traceContext = IoTrace.fileReadBegin(path);
        int b = 0;
        try {
            b = read0();
        } finally {
            IoTrace.fileReadEnd(traceContext, b == -1 ? 0 : 1);
        }
        return b;
    }

    private native int read0() throws IOException;

    /**
     * Reads a subarray as a sequence of bytes.
     * @param b the data to be written
     * @param off the start offset in the data
     * @param len the number of bytes that are written
     * @exception IOException If an I/O error has occurred.
     */
    private native int readBytes(byte b[], int off, int len) throws IOException;

    /**
     * Reads up to <code>b.length</code> bytes of data from this input
     * stream into an array of bytes. This method blocks until some input
     * is available.
     *
     * @param      b   the buffer into which the data is 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 file has been reached.
     * @exception  IOException  if an I/O error occurs.
     */
    public int read(byte b[]) throws IOException {
        Object traceContext = IoTrace.fileReadBegin(path);
        int bytesRead = 0;
        try {
            bytesRead = readBytes(b, 0, b.length);
        } finally {
            IoTrace.fileReadEnd(traceContext, bytesRead == -1 ? 0 : bytesRead);
        }
        return bytesRead;
    }

作者: 阿卜    时间: 2016-8-23 12:27
InputStream 里的read()是抽象方法,FileInputStream里的read()重写了它,然后在read()方法里调用read0()这个原生态方法。
作者: 陈耀鹏    时间: 2016-8-23 21:55
兄台!看着你这么单纯好学,我推荐你最好凡事不懂就问百度吧!亲




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2