Java的IO流

概念

  1. IO流:数据从外部介质(磁盘、键盘)输入到内存为输入流,反之为输出流。
  2. 文件的存储方式:所有的文件在硬盘或在传输时都是以字节的方式进行的,字符是只有在内存中才会形成。读取字节流后,不直接操作,而是查询指定编码表,就可以转化为字节流(如文字)。
  3. Java的字节流和字符流
    1. 字节流:按字节处理,直接操作文件本身,主要用于处理二进制数据、视频、图片、文件等。
    2. 字符流:按虚拟机的encode来处理,要进行字符集转化。主要用来处理文本。
  4. 父类:InputStream、OutputStream是所有字节IO流的祖先,Reader、Writer是所有字符IO流的祖先。他们r都是抽象类,写代码不能能直接new,需要使用多态方式转化。
  5. 字节流和字符流的区别:字节流不使用缓冲区

操作举例

字节流举例

import java.io.File;    
import java.io.FileOutputStream;    
import java.io.OutputStream;    
public class OutputStreamDemo05 {    
	public static void main(String[] args) throws Exception {  
		File f = new File("d:" + File.separator + "test.txt"); // 声明File对象 
		//通过子类实例化父类对象 
		OutputStream out = null;  
		out = new FileOutputStream(f);  //多态实例化
		String str = "Hello World!!!";
		byte b[] = str.getBytes();
		out.write(b);
		out.close(); //因为字节流不用缓冲区,所以即使不关闭流,也会输出结果
		}
}

字符流举例

import java.io.File;    
import java.io.FileWriter;    
import java.io.Writer;    
public class WriterDemo03 {    
    public static void main(String[] args) throws Exception { 
    	File f = new File("d:" + File.separator + "test.txt");
    	//通过子类实例化父类对象 
    	Writer out = null;   
    	out = new FileWriter(f); //多态实例化
    	String str = "Hello World!!!";
    	out.write(str); 
    	//out.close();//只有关闭字符流或者使用out.flush()强制清空缓冲区,才会输出结果
    }

相互转化

从字节流转化为字符流时,实际上就是byte[]转化为String
String(byte bytes[], String charsetName)
字符流转化为字节流时,实际上是String转化为byte[]
byte[] String.getBytes(String charsetName)

posted @ 2020-08-05 09:48  chzhyang  阅读(123)  评论(0编辑  收藏  举报