逐个字节去复制一个文件,效率超慢,都说用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[])也是逐个字节从磁盘读?????
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[])也是逐个字节从磁盘读?????
他是在缓存里面执行的,,
你用read去读的话,一次读一个,读完写完,再读下一个
你用read(byte[])的话,是一次把n个字节存到byte[]中,再读,而这个读是在缓存中完成的。。怎么说的 ,就像搬运转头一样,,你用人搬运呢,一次搬运一块要不停的来回的跑,
你可以用车去搬运呀,那一次可以搬运很多块,但我们别忘了,我们在装车的时候,也是要人一块的一块去装车的,,
不知道这么回答,你可满意
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]
有什么区别,不都一样
按字节为最小单位读取 一旦发生异常 可以返回异常发生前所读
c = read();
if (c == -1) {
break;
}
b[off + i] = (byte)c;
恩 说的就是那个