public class ByteBufferTimeUsageDemo2 {
private static final String SRC_FILE = "D:\\TXYdownload\\install app\\ensp\\eNSP&CRT\\CE.img";
private static final String DEST_FILE = "D:\\TXYdownload\\install app\\ensp";
public static void main(String[] args) {
// copy1();/**使用原始字节流,一个字节一个字节地复制1G的大文件, 耗时长到不能等*/
// copy2();/**使用原始字节流按一个一个字节数组,复制1G的大文件,桶1024k用了9秒,8192用了2.4秒*/
// copy3();/**使用缓冲字节流按一个一个字节,复制1G的大文件,用了40秒*/
copy4();/**使用缓冲字节流按一个一个字节数组,复制1G的大文件,桶1024用时2.6秒,8192用了2.4秒*/
}
private static void copy4() {
long startTime = System.currentTimeMillis();
try (InputStream in = new FileInputStream(SRC_FILE);
InputStream bin = new BufferedInputStream(in);
OutputStream ou = new FileOutputStream(DEST_FILE+"new_CE.img");
OutputStream bou = new BufferedOutputStream(ou);
/**资源放在这,你不用操心最后刷新或者释放的事了*/
) {
int num;/**返回的是每次读取到的字节数目*/
byte[] bys = new byte[8192];/**每次读取到的字节会存入这个数组, 1024用时2.6秒,8192用了2.4秒*/
while ((num = bin.read(bys)) != -1){
bou.write(bys);
}
System.out.println("Copy is finished.");
} catch (Exception e) {
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
System.out.println("Buffered byte stream arr by arr time usage: "+(endTime-startTime)/1000.0+"s");
}
private static void copy3() {
long startTime = System.currentTimeMillis();
try (InputStream in = new FileInputStream(SRC_FILE);
InputStream bin = new BufferedInputStream(in);
OutputStream ou = new FileOutputStream(DEST_FILE+"new_CE.img");
OutputStream bou = new BufferedOutputStream(ou);
/**资源放在这,你不用操心最后刷新或者释放的事了*/
) {
int num;/**读到的单字节,读完之后下一次返回-1,代表空*/
while ((num = bin.read()) != -1){
bou.write(num);/**你用缓冲,这里还是一个字节一个字节地注入,依然慢,只是能完成任务*/
}
System.out.println("Copy is finished.");
} catch (Exception e) {
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
System.out.println("Buffered byte stream one by one time usage: "+(endTime-startTime)/1000.0+"s");
}
private static void copy2() {
long startTime = System.currentTimeMillis();
try (InputStream in = new FileInputStream(SRC_FILE);
OutputStream ou = new FileOutputStream(DEST_FILE+"new_CE.img");
/**资源放在这,你不用操心最后刷新或者释放的事了*/
) {
int num;/**返回的是每次读取到的字节数目*/
byte[] bys = new byte[8192];/**每次读取到的字节会存入这个数组, 1024k用了9秒,8192用了2.4秒*/
while ((num = in.read(bys)) != -1){
ou.write(bys);
}
System.out.println("Copy is finished.");
} catch (Exception e) {
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
System.out.println("Original byte stream arr by arr time usage: "+(endTime-startTime)/1000.0+"s");
}
private static void copy1() {
long startTime = System.currentTimeMillis();
try (InputStream in = new FileInputStream(SRC_FILE);
OutputStream ou = new FileOutputStream(DEST_FILE+"new_CE.img");
/**资源放在这,你不用操心最后刷新或者释放的事了*/
) {
int num;/**返回的是byte,但你完全可以用int来接*/
while ((num = in.read()) != -1){
ou.write(num);
}
System.out.println("Copy is finished.");
} catch (Exception e) {
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
System.out.println("Original byte stream one by one time usage: "+(endTime-startTime)/1000.0+"s");
}
}
20220518_原始字节流与缓冲字节流,单字节,字节数组,四种组合复制1G大文件耗时案例
最新推荐文章于 2023-09-18 16:42:05 发布
该博客通过对比不同方式复制1G大文件的耗时,展示了使用原始字节流、原始字节流按数组、缓冲字节流按字节以及缓冲字节流按数组的效率。结果显示,使用缓冲字节流按数组复制文件速度最快,且数组大小为8192字节时,仅需2.4秒。
418

被折叠的 条评论
为什么被折叠?



