字节流与字符流的区别:
字节流与字符流的区别:
所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列。
字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串; 2. 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。
字节流是最基本的,包括InputStream和OutputStream,主要用在处理二进制数据,它是按字节来处理的。但实际中很多的数据是文本,于是又提出了字符流的概念,通过 InputStreamReader,OutputStreamWriter来进行。
字节流:
① FileOutputStream :往文件中写入的时候传入的参数只能是Unicode编码,也就是99——c。
这样子。
FileOutputStream fos=new FileOutputStream("ieda_test\\src\\IO\\fos.txt");
byte[] b={91,92,93,99};
byte[] a="abcdef".getBytes();
fos.write(b,0,b.length);
② FileInputStream :读取文件中的数据的时候,读取出来的也是编码对应的字节,如c——99。
FileInputStream fis=new FileInputStream("ieda_test\\src\\IO\\fos.txt");
//读取数据
int by=fis.read();
System.out.println(by);
System.out.println((char)by);
也可以使用字节数组byte[]来一次读取一个字节数组
FileInputStream fis=new FileInputStream("ieda_test\\src\\IO\\fos.txt");
byte[] bys=new byte[1024];//一次读取1024个字符数组
int len;
while((len=fis.read(bys))!=-1){//fis.read(bys)将fis中的内容读取出来存入bys中,为空就等于-1
System.out.println(new String(bys,0,len));
}
③ BufferedInputStream,BufferedOutputStream
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
BufferedInputStream中的参数为FileInputStream
BufferedOutputStream中的参数为FileOutputStream
字符流:
① OutputStreamWriter、InputStreamWriter
FileOutputStream fos=new FileOutputStream("ieda_test\\src\\IO\\fos.txt");
OutputStreamWriter osw=new OutputStreamWriter(fos);
osw.write(99);
osw.flush();
OutputStreamWriter 中的参数是FileOutputStream对象。
FileWriter说是OutputStreamWriter的简写,实际上却不然,OutputStreamWriter中的参数是FileOutputStream对象,FileWriter中的参数是文件路径。
FileWriter fw=new FileWriter("ieda_test\\Copy.java");
FileReader fr=new FileReader("ieda_test\\src\\IO\\IODemo01.java");
与字符流的区别是, OutputStreamWriter写入文件可以写入字符串也可以写入编码
如:
FileOutputStream fos=new FileOutputStream("ieda_test\\src\\IO\\fos.txt");
OutputStreamWriter osw=new OutputStreamWriter(fos);
osw.write(99);
osw.write("99");
osw.flush();
fox.txt中
②BufferedReader、BufferedWriter
BufferedReader、BufferedWriter中的参数为FileReader、FileWriter或OutputStreamReader、InputStreamWriter。
BufferedReader br=new BufferedReader(new FileReader("ieda_test\\src\\IO\\fos.txt"));
BufferedWriter bw=new BufferedWriter(new FileWriter("ieda_test\\src\\IO\\fos.txt"));
等同于
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("ieda_test\\src\\IO\\fos.txt")));
BufferedReader br=new BufferedReader(new FileReader(new OutputStreamWriter(new FileInputStream("ieda_test\\src\\IO\\fos.txt")));
BufferedReader br1=new BufferedReader(new FileReader("ieda_test\\src\\IO\\fos.txt"));
BufferedReader br2=new BufferedReader(new InputStreamReader(new FileInputStream("ieda_test\\src\\IO\\fos.txt")));
同样是封装文件中的数据为BufferReader对象,这里就可以看出来FileReader和InputStreamReader虽然是同级,但是参数不同,且FileReader更方便一些。
BufferedReader、BufferedWriter可以用于将字节流封装为字符流
①字节流由文件输入
BufferedReader br2=new BufferedReader(new InputStreamReader(new FileInputStream("ieda_test\\src\\IO\\fos.txt")));
②字节流由键盘录入
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
等级(个人排序,方便记忆)
BufferedWriter > FileWriter =OutputStreamWriter > BufferedInputStream > FileOutputStream