import java.io.*;
public class FileTest
{
public static void main(String[] args)
{
FileInputStream fis = null;
FileOutputStream fos = null;
try
{
fis = new FileInputStream("d:/1.jpg");
fos = new FileOutputStream("e:/1.jpg");
byte[] buf = new byte[1024];
int n = 0;
while ((n=fis.read(buf)) != -1)
{
fos.write(buf);
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
try
{
fis.close();
fos.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
6 个解决方案
#1
n=fis.read(buf)
这一句的代码就应该是,把fis里的字节读出来,写到buf数组里,意思就是没一次循环都会用最新读到的内容覆盖掉上一次循环读到的内容,每次读到的数据只有数组定义的那么大,这个数组就起到了缓存的作用,不至于,一下子把原文件直接读到内存,若是个很大的文件,直接内存溢出了,所有用这个数组缓冲。
这一句的代码就应该是,把fis里的字节读出来,写到buf数组里,意思就是没一次循环都会用最新读到的内容覆盖掉上一次循环读到的内容,每次读到的数据只有数组定义的那么大,这个数组就起到了缓存的作用,不至于,一下子把原文件直接读到内存,若是个很大的文件,直接内存溢出了,所有用这个数组缓冲。
#2
恩,这个数组就相当于缓冲区的作用
#3
这个我知道,但我不明白的是,如果每一次用新读到的内容覆盖之前的内容的话,那假如文件大小不是buf大小的整数倍的话,最后一次写的内容不是会出错?
#4
不是整数倍的话,对多少算多少,buf不一定要装满的吧。然后再写出去,不会出错的吧。
#5
我知道了,应该调用这个函数才对 fos.write(buf, 0, n);
#6
恭喜!!
#1
n=fis.read(buf)
这一句的代码就应该是,把fis里的字节读出来,写到buf数组里,意思就是没一次循环都会用最新读到的内容覆盖掉上一次循环读到的内容,每次读到的数据只有数组定义的那么大,这个数组就起到了缓存的作用,不至于,一下子把原文件直接读到内存,若是个很大的文件,直接内存溢出了,所有用这个数组缓冲。
这一句的代码就应该是,把fis里的字节读出来,写到buf数组里,意思就是没一次循环都会用最新读到的内容覆盖掉上一次循环读到的内容,每次读到的数据只有数组定义的那么大,这个数组就起到了缓存的作用,不至于,一下子把原文件直接读到内存,若是个很大的文件,直接内存溢出了,所有用这个数组缓冲。
#2
恩,这个数组就相当于缓冲区的作用
#3
这个我知道,但我不明白的是,如果每一次用新读到的内容覆盖之前的内容的话,那假如文件大小不是buf大小的整数倍的话,最后一次写的内容不是会出错?
#4
不是整数倍的话,对多少算多少,buf不一定要装满的吧。然后再写出去,不会出错的吧。
#5
我知道了,应该调用这个函数才对 fos.write(buf, 0, n);
#6
恭喜!!