字节流:可以处理任何类型的数据,如视频、图片、文字、音频等,在读取的时候,读到一个字节就会返回一个字节。在Java中对应的类都是以“Stream”结尾的。
字符流:字符流只可以处理纯文本数据,如txt等,在读取的时候,读到一个或多个字节,先查找指定的编码表,然后将查到的字符返回。在Java中对应的类都以“Reader”或“Writer”结尾的。
1.使用带缓冲的字节流进行视频文件的IO拷贝操作
package File;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
//视频文件的复制
public class IOOperate {
public static void main(String[] args) throws IOException {
//有缓冲无字节数组的复制视频文件
FileInputStream fis = new FileInputStream("study.mp4");
BufferedInputStream bis = new BufferedInputStream(fis,100000);
// 下面的两行用于文本类型的读取,是属于字符流
// InputStreamReader isr = new InputStreamReader(fis);
// BufferedReader br = new BufferedReader(isr);
FileOutputStream fos = new FileOutputStream("new_study.mp4");
BufferedOutputStream bos = new BufferedOutputStream(fos,100000);
// 下面的两行用于文本文件的打印,是字符流
// OutputStreamWriter osw = new OutputStreamWriter(fos);
// BufferedWriter bw = new BufferedWriter(osw);
byte input[] = new byte[100000];
int count = 0;
long beforeTime= System.currentTimeMillis();
while (bis.read(input) != -1) {
bos.write(input);
count++;
}
bis.close();
fis.close();
bos.close();
fos.close();
System.out.println("复制耗费的时间:"+(System.currentTimeMillis()-beforeTime)+"ms");
System.out.println("次数:"+count);
}
}
2.不带缓冲的字符流对文本文档进行拷贝操作,Java学习之文件操作9里面有带缓冲的字符流对文本文档进行拷贝操作。
package File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
public class IOCharsStreamOperate {
public static void main(String[] args) throws IOException {
//这里要注意最好制定好编码,不然话出来的数据可能会乱码
FileInputStream fis = new FileInputStream("123.txt");
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
FileOutputStream fos = new FileOutputStream("new_123.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
char input[] = new char[100];
int l = 0;
while((l = isr.read(input)) != -1)
{
//数组是没有重写toString方法的,所以用字符数组输出的内容是有问题的
//所有的类都是继承Object这个类
//System.out.println(input.toString());所以这个语句输出的不是正确内容
//方1将字符串变为String
//String str = new String(input,0,l);
//System.out.println(str);
//方2将字符串变为String 数组自带的length的大小指的是当时定义的时候的大小,不是里面存储的内容所占的大小
//for (int i = 0; i < l; i++) {
// System.out.print(input[i]);
//}
//System.out.println();
//将字符数组里面的0-l的字符输出到新的文件
osw.write(input, 0, l);//用来复制文本文件
}
osw.close();
fos.close();
isr.close();
fis.close();
}
}
919

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



