字节流

字节流可以操作一切文件,读入字符文件注意编码;字符流专门操作字符文件,不用担心乱码

输入输出流是相对于程序来讲的,InputStream是父类,FileInputStream(文件字节输入流)和BufferedInputStream是子类;OutputStream同理

FileInputStream

1
2
3
File file = new File("C:\\Users\\86175\\Desktop\\Snipaste_2021-08-12_23-49-04.png");
FileInputStream fis=new FileInputStream(file);
FileOutputStream fos=new FileOutputStream("1.png");

fis.read();返回fis的一个字节int
fis.read(bytes[] b);将fis中的从0到b.length的字节读到b中
fis.read(bytes[] b,0,len);指定读的长度
由于一个字节一个字节地读,效率很慢

fos.write(int b);将一个字节写入fos中
fos.write(bytesp[] b);
fos.write(bytes[] b, int off,int len);

long start=System.currentTimeMillis();
long end=System.currentTimeMillis();
计算代码段运行时间

BufferedInputStream

1
2
3
4
5
6
7
8
9
10
//代码实现了使用buffer复制文件
File file = new File("C:\\Users\\86175\\Desktop\\Snipaste_2021-08-12_23-49-04.png");
FileInputStream fis=new FileInputStream(file);
FileOutputStream fos=new FileOutputStream("1.png");
byte[] b=new byte[1024];//创建的缓冲大小,更改这个值可以改变速度,但并非越大越快(一般建议小于文件大小)
BufferedInputStream bis=new BufferedInputStream(fis);
BufferedOutputStream bos=new BufferedOutputStream(fos);
while( (len=bis.read(b))!=-1){
bos.write(b);
}

字符流

FileReader、BufferedRead均继承自Reader
Writer同理

BufferedReader比FileReader快

1
2
3
4
5
6
7
8
9
10
11
12
File file = new File("baidu.txt");
FileReader fr = new FileReader(file);
FileWriter fw = new FileWriter(newFile("b.txt"));
BufferedReader br = new BufferedReader(fr);
BufferedWriter bw = new BufferedWriter(fw);
char[] b = new char[1024];
int len = 0;
//下面的fr fw和br bw可以替换
while ((len = fr.read(b)) != -1) {
fw.write(b, 0, len);
}