每次看到类似下面的代码我就有些疑问:try{
InputStream is=new FileInputStream(new File("src/Test.java");
OutputStream os=new FileOutputStream(new File("c:/"+is.getName());
byte b[]=new byte[1024];
int length=0;
try{
   while((length=is.read(b))!=-1)
       os.write(b,0,length);
}catch(IOException e){
}
}catch(FileNotFoundException e){
}
....我的问题是,我查了API,对public void write(byte[] b,int off,int len)的解释是:
将指定字节数组中从偏移量 off 开始的 len 个字节写入此输出流。
这样的话,while循环里我第一次写入第1个字节,第二次写入第1,2个字节,第三次写入第1,2,3个字节 每次写入都把以前写过的重新覆盖了一次(比如第1个字节,每次写入都会重新覆盖),是这样吗?这效率太低了吧?

解决方案 »

  1.   

    is.read(b)循环的时候b也在变 length是b的长度 所以每次b的内容都不一样 哪里是覆盖呢?
      

  2.   

    public int read(byte[] b)
             throws IOException
    从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。在某些输入可用之前,此方法将阻塞。 覆盖:
    类 InputStream 中的 read
    参数:
    b - 存储读取数据的缓冲区。 
    返回:
    读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。 
      

  3.   

    哦,看样子是我理解错了,是不是指每次从输入流读入b[]后,就立刻将b[]中的内容输出到输出流中去了,b[]的内容是一直变化的
      

  4.   

    length=is.read(b)
    这句每次循环都要执行一遍 b的内容当然是不断更新的啊