逐个字节去复制一个文件,效率超慢,都说用read(byte[]),查看api里面的似乎read(byte[])也是循环调用read函数代码如下
    
public int read(byte b[], int off, int len) throws IOException {
if (b == null) {
    throw new NullPointerException();
} else if (off < 0 || len < 0 || len > b.length - off) {
    throw new IndexOutOfBoundsException();
} else if (len == 0) {
    return 0;
} int c = read();
if (c == -1) {
    return -1;
}
b[off] = (byte)c; int i = 1;
try {
    for (; i < len ; i++) {
c = read();
if (c == -1) {
    break;
}
b[off + i] = (byte)c;
    }
} catch (IOException ee) {
}
return i;
    }不大清楚为什么read(byte[])也是逐个字节从磁盘读?????

解决方案 »

  1.   

    read(byte[])他是一次读入len长度的数据放到缓冲区中,当然它返回的是读入到缓冲区中的字节数
      

  2.   

    这俩个还是不一样的,兄弟,,
    他是在缓存里面执行的,,
    你用read去读的话,一次读一个,读完写完,再读下一个
    你用read(byte[])的话,是一次把n个字节存到byte[]中,再读,而这个读是在缓存中完成的。。怎么说的 ,就像搬运转头一样,,你用人搬运呢,一次搬运一块要不停的来回的跑,
    你可以用车去搬运呀,那一次可以搬运很多块,但我们别忘了,我们在装车的时候,也是要人一块的一块去装车的,,
    不知道这么回答,你可满意
      

  3.   

    一次读入len长度的数据放到缓冲区中,这个一次怎么解释:try {
            for (; i < len ; i++) {
            c = read();
            if (c == -1) {
                break;
            }
            b[off + i] = (byte)c;
           }
        } catch (IOException ee) {
        }下面这个就是一次读,那这个和
    [code=Java]
    while(fin.read()!=-1)
    {
       ...
    }
    [code]
    有什么区别,不都一样
      

  4.   

    我知道一次读bufsize 个会比较快,但是源码里面是这样的,我不大理解,就是上面的那个函数,似乎read(byte[])就是调用read()的循环来完成所谓的一次读取bufsize个字节,那…… 额 脑袋转不过来
      

  5.   

    The read(b, off, len) method for class InputStream simply calls the method read() repeatedly.
    按字节为最小单位读取 一旦发生异常 可以返回异常发生前所读
      

  6.   

    怎么个减少法, 比如一个文件1M 用read是1M次,用read(byte[])还是1M次呀?????
      

  7.   

    你的意思是说for (; i < len ; i++) {
            c = read();
            if (c == -1) {
                break;
            }
            b[off + i] = (byte)c;
      

  8.   

    hmsuccess 
    恩 说的就是那个