大数据必学Java基础(七十一):比对非文本文件复制的三种方法的效率
【摘要】 比对非文本文件复制的三种方法的效率1、读入一个字节,写出一个字节2、利用缓冲字节数组3、利用缓冲区代码:package com.lanson.io02;import java.io.*;/** * @author : Lansonli */public class Test06 { //这是一个main方法,是程序的入口: public static void main(Str...
比对非文本文件复制的三种方法的效率
1、读入一个字节,写出一个字节
2、利用缓冲字节数组
3、利用缓冲区
代码:
package com.lanson.io02;
import java.io.*;
/**
* @author : Lansonli
*/
public class Test06 {
//这是一个main方法,是程序的入口:
public static void main(String[] args) throws IOException {
//1.有一个源图片
File f1 = new File("d:\\LOL.jpg");
//2.有一个目标图片:
File f2 = new File("d:\\LOL2.jpg");
//3.有一个输入的管道 怼 到 源文件:
FileInputStream fis = new FileInputStream(f1);
//4.有一个输出的管道 怼到 目标文件上:
FileOutputStream fos = new FileOutputStream(f2);
//5.功能加强,在FileInputStream外面套一个管:BufferedInputStream:
BufferedInputStream bis = new BufferedInputStream(fis);
//6.功能加强,在FileOutputStream外面套一个管:BufferedOutputStream:
BufferedOutputStream bos = new BufferedOutputStream(fos);
//7.开始动作 :
long startTime = System.currentTimeMillis();
byte[] b = new byte[1024];
int len = bis.read(b);
while(len!=-1){
bos.write(b,0,len);
/* bos.flush(); 底层已经帮我们做了刷新缓冲区的操作,不用我们手动完成:底层调用flushBuffer()*/
len = bis.read(b);
}
long endTime = System.currentTimeMillis();
System.out.println("复制完成的时间为:"+(endTime-startTime));
//8.关闭流:
//倒着关:
//如果处理流包裹着节点流的话,那么其实只要关闭高级流(处理流),那么里面的字节流也会随之被关闭。
bos.close();
bis.close();
/*fos.close();
fis.close();*/
}
}
一、缓冲字符流(处理流)
BufferedReader,BufferedWriter完成文本文件的复制
package com.lanson.io02;
import java.io.*;
/**
* @author : Lansonli
*/
public class Test07 {
//这是一个main方法,是程序的入口:
public static void main(String[] args) throws IOException {
//1.有一个源文件:
File f1 = new File("d:\\Test.txt");
//2.有一个目标文件:
File f2 = new File("d:\\Demo.txt");
//3.需要一个管 怼到 源文件:
FileReader fr = new FileReader(f1);
//4.需要一根管怼到目标文件:
FileWriter fw = new FileWriter(f2);
//5.套一根管在输入字符流外面:
BufferedReader br = new BufferedReader(fr);
//6.套一根管在输出字符流外面:
BufferedWriter bw = new BufferedWriter(fw);
//7.开始动作:
//方式1:读取一个字符,输出一个字符:
/*int n = br.read();
while(n!=-1){
bw.write(n);
n = br.read();
}*/
//方式2:利用缓冲数组:
/*char[] ch = new char[30];
int len = br.read(ch);
while(len!=-1){
bw.write(ch,0,len);
len = br.read(ch);
}*/
//方式3:读取String:
String str = br.readLine();//每次读取文本文件中一行,返回字符串
while(str!=null){
bw.write(str);
//在文本文件中应该再写出一个换行:
bw.newLine();//新起一行
str = br.readLine();
}
//8.关闭流
bw.close();
br.close();
}
}
二、转换流
InputStreamReader、OutputStreamWriter
1、转换流
作用:将字节流和字符流进行转换。
2、转换流
属于字节流还是字符流? -- 属于字符流
InputStreamReader :字节输入流 -- 字符的输入流
OutputStreamWriter : 字符输出流 -- 字节的输出流
3、图解
4、将输入的字节流转换为输入的字符流,然后完成文件到程序
package com.lanson.io03;
import java.io.*;
/**
* @author : Lansonli
*/
public class Test01 {
//这是一个main方法,是程序的入口:
public static void main(String[] args) throws IOException {
//文件---》程序:
//1.有一个源文件:
File f = new File("d:\\Test.txt");
//2.需要一个输入的字节流接触文件:
FileInputStream fis = new FileInputStream(f);
//3.加入一个转换流,将字节流转换为字符流:(转换流属于一个处理流)
//将字节转换为字符的时候,需要指定一个编码,这个编码跟文件本身的编码格式统一
//如果编码格式不统一的话,那么在控制台上展示的效果就会出现乱码
//InputStreamReader isr = new InputStreamReader(fis,"utf-8");
//获取程序本身的编码--》utf-8
InputStreamReader isr = new InputStreamReader(fis);
//4.开始动作,将文件中内容显示在控制台:
char[] ch = new char[20];
int len = isr.read(ch);
while(len!=-1){
//将缓冲数组转为字符串在控制台上打印出来
System.out.print(new String(ch,0,len));
len = isr.read(ch);
}
//5.关闭流:
isr.close();
}
}
三、转换流
InputStreamReader,OutputStreamWriter实现文本文件的复制
package com.lanson.io03;
import java.io.*;
/**
* @author : Lansonli
*/
public class Test02 {
//这是一个main方法,是程序的入口:
public static void main(String[] args) throws IOException {
//1.有一个源文件
File f1 = new File("d:\\Test.txt");
//2.有一个目标文件:
File f2 = new File("d:\\Demo.txt");
//3.输入方向:
FileInputStream fis = new FileInputStream(f1);
InputStreamReader isr = new InputStreamReader(fis,"utf-8");
//4.输出方向:
FileOutputStream fos = new FileOutputStream(f2);
OutputStreamWriter osw = new OutputStreamWriter(fos,"gbk");
//5.开始动作:
char[] ch = new char[20];
int len = isr.read(ch);
while(len!=-1){
osw.write(ch,0,len);
len = isr.read(ch);
}
//6.关闭流:
osw.close();
isr.close();
}
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)