黑马程序员技术交流社区
标题:
下面那种copy文件的效率高
[打印本页]
作者:
赵文杰
时间:
2012-5-23 14:08
标题:
下面那种copy文件的效率高
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyByArrayDemo {
public static void main(String[] args) throws IOException {
String s="file.txt";
FileInputStream fis = new FileInputStream(s);
String t="desc.txt";
FileOutputStream fos = new FileOutputStream(t);
char[] f=s.toCharArray();
byte[] buffer = new byte[f.length]; // 定义byte[]用来存储数据
int len; // 定义int变量用来记住有效数据的个数
while ((len = fis.read(buffer)) != -1) // 一次读取buffer.length个数据, 将数据存在buffer中, len记住个数. 如果没遇到文件末尾, 进入循环
fos.write(buffer, 0, len); // 将数组中的数据从0号索引开始, 写出len个
fis.close();
fos.close();
}
}
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("004.jpg"); // 创建输入流指向file.txt
FileOutputStream fos = new FileOutputStream("dest.jpg"); // 创建输出流指向dest.txt
int b; // 定义变量, 用来存储数据
while ((b = fis.read()) != -1) // 循环读取, 直到读到末尾为止
fos.write(b); // 将读到的字节写出
fis.close(); // 关闭输入流
fos.close(); // 关闭输出流
}
作者:
蒋映辉
时间:
2012-5-23 14:47
肯定是第一种 第一种一次读取buffer个字节以后写入 循环次数少
第二种一次一个字符,循环次数多了,用时肯定就多了
作者:
8161776
时间:
2012-5-23 16:00
下面那种copy文件的效率高
你可以自己测试的
在开始的时候加上long begin = System.currentTimeMillis();
在结束的时候加上long end = System.currentTimeMillis();
然后最后打印end - begin
作者:
尹丽峰
时间:
2012-5-23 16:44
论读取速度来说肯定是第一个慢 一个字符一个字符读 和一串一串读 单个的快点 读一次写一次!
作者:
彩虹
时间:
2012-5-23 21:52
肯定是第一种了,因为第一种是先将文件的内容读到字节数组中,是一次读取buffer.length个数据,再开始循环的,循环次数少,而第二种是一个一个的读,循环的读取,循环次数多,读写转换的次数也多,当然就慢些了
作者:
邓杰
时间:
2012-6-9 07:22
标题:
RE: 下面那种copy文件的效率高
相对来讲第一个要高一些,但总的来说两个Copy效率都很低:第一个你虽然定义了缓冲区。但缓冲区的大小只有s.length个字节
(byte[] buffer = new byte[f.length]; );
也就是只有8个字节;一般来讲。缓冲区的大小会定义1024的整数倍; 这样会好很多。如果你把缓冲区定义为1M或者更多会更好;如byte[] buffer = new byte[1024*1024*x]; x 就在1到64之间;因为JVM的默认分配内存为64M, 一般不要超过这个数,否则会内存溢出;
当然任何事情都有他的局限性;x定义的越高风险也就越大。比如停电或者死机之类的意外情况:在读取流读取来数据,存在缓冲区中。还没有来的及写入硬盘;则缓冲区中的数据会被清空。因为缓冲区的数据是存在于内存而不是硬盘;JVM关闭之后就会被清空;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyByArrayDemo {
public static void main(String[] args) throws IOException {
String s="file.txt";
FileInputStream fis = new FileInputStream(s);
String t="desc.txt";
FileOutputStream fos = new FileOutputStream(t);
char[] f=s.toCharArray();
byte[] buffer = new byte[f.length]; // 定义byte[]用来存储数据//
f.length只有8;所以你的buffer数组也只有8;还是太短。一般建议定义为1024的整数倍;
int len; // 定义int变量用来记住有效数据的个数
while ((len = fis.read(buffer)) != -1) // 一次读取buffer.length个数据, 将数据存在buffer中, len记住个数. 如果没遇到文件末尾, 进入循环
fos.write(buffer, 0, len); // 将数组中的数据从0号索引开始, 写出len个
fis.close();
fos.close();
}
}
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("004.jpg"); // 创建输入流指向file.txt
FileOutputStream fos = new FileOutputStream("dest.jpg"); // 创建输出流指向dest.txt
int b; // 定义变量, 用来存储数据
while ((b = fis.read()) != -1) // 循环读取, 直到读到末尾为止
fos.write(b); // 将读到的字节写出
fis.close(); // 关闭输入流
fos.close(); // 关闭输出流
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2