IO流概念:io流的i代表input(输入),o也就是out代表输出,流就是流动的意思,输入端流动到输出端
IO流有字节输入流,字节输出流,字符输入流,字符输出流,缓冲字节输入输出流,缓冲字符输入输出流,转换流,对象流,打印流
* 数据进入内存:读
* 数据出内存:写
*
* 下面所说的这些类都是在:java.io包下
* 读写:操作的是文件
* 底层传输的数据都是以字节的形式存在。
*
* 字节输入流(InputStream):抽象类
* 常用方法:
* int read();//读取一个字节的数据,如果没有数据则返回-1
* int read(byte[] b);//读取数据存入byte数组中,返回读取的长度,如果没有数据则返回-1
* void close();
*
* 常用子类:
* FileInputStream:
* 构造方法:
* public FileInputStream(String path);
* public FileInputStream(File path);
*
*
* 字节输出流(OutStream):抽象类
* 常用方法:
* void write(int data);//写出一个字节的数据
* void write(byte[] b);//写出byte数组中的数据
* void write(byte[] b,int offset,int len);
* void flush();
* void close();
* 常用子类:
* FileOutputStream:
* 构造方法:
* public FileOutputStream(String path);
* public FileOutputStream(File path);
*
* //append为true:表示追加。 为false,表示覆盖
* public FileOutputStream(String path,boolean append);
*
* //这四个构造方法,最终使用的其实是这一个构造方法
* public FileOutputStream(File path,boolean append);
*
* 字符输入流(Reader):抽象类
* 常用方法:
* int read();//读取一个字符的数据
* int read(char[] ch);//读取数据存入char数组中,返回读取的长度,如果没有读到数据则返回-1
* void close();
* 常用子类:
* FileReader:
* 调用下列构造方法的时候,底层会创建一个8192的byte数组。
* 调用读方法,每次回读取8192byte字节的数据, 我们需要的字符
* 是从byte数组的对应位置转换的来的。
* 作用:减少读取的次数
*
* 构造方法:
* public FileReader(String path);
* public FileReader(File path);
*
* 字符输出流(Writer):抽象类
* 常用方法:
* void write(int data);//写出一个字符的数据
* void write(char[] ch);
* void write(char[] ch,int offset,int len);
* void write(String str);
* void write(String str,int offset,int len);
* void flush();//刷新缓冲区,不关闭流,还可以继续传输数据。
* void close();//关闭流,刷新缓冲区
* 常用子类:
* FileWriter:
* 调用下列构造方法创建对象的时候,底层会创建一个长度是8192的byte数组(缓冲)
* 我们写出的字符,会转换存入这个byte数组中。
* 当该byte数组存不下数据的时候,或者显示的调用flush方法,会把该byte数组中的数据写出去。
* 构造方法:
* public FileWriter(String path);
* public FileWriter(File path);
* public FileWriter(String path,boolean append);
* public FileWriter(File path,boolean append);
* BufferedOutputStream:缓冲字节输出流
* 构造方法:
* //调用这个构造方法,底层会创建一个长度是8192的byte数组
* //写出的数据,存入缓冲区(8192的byte数组)中
* //存满了,或者显示的调用flush(close)方法,会把缓冲区中的数据写出去
* //有了缓冲区减少了写出的次数
* public BufferedOutputStream(OutputStream os);
* //调用这个构造方法,底层会创建一个长度是size的byte数组
* public BufferedOutputStream(OutputStream os,int size);
* BufferedWriter:
* 构造方法:
* //调用下面构造方法的时候,底层会创建一个长度是8192的char数组
* //写出数据线存入8192的char数组,直到char数组存满了,或者显示的调用flush方法
* //会把char数组中的内容转换存入到byte数组中,再把byte数组中的数据写出去。
* //和直接使用FileWriter的区别在于,字符转换字节的次数(效率)不相同,写出次数是相同的。
* public BufferedWriter(Writer w);
* //调用下面构造方法的时候,底层会创建一个长度是size的char数组
* public BufferedWriter(Writer w,int size);
* BufferedReader:
* 构造方法:
* //调用下面构造方法的时候,底层会创建长度是8192的char数组
* //每次调用读取方法,读8192byte的数据存入byte数组中
* //把byte数组中的数据转换存入char数组中,直到char数组存满
* //我们操作的数据是从char数组中对应位置获取
* //和FileReader比较,读取次数是一样的。从byte转换为char转换次数不一样
* public BufferedReader(Reader r);
* //调用下面构造方法的时候,底层会创建一个长度是size的char数组
* public BufferedReader(Reader r,int size);
* 对象流
* BufferedReader:
* 构造方法:
* //调用下面构造方法的时候,底层会创建长度是8192的char数组
* //每次调用读取方法,读8192byte的数据存入byte数组中
* //把byte数组中的数据转换存入char数组中,直到char数组存满
* //我们操作的数据是从char数组中对应位置获取
* //和FileReader比较,读取次数是一样的。从byte转换为char转换次数不一样
* public BufferedReader(Reader r);
* //调用下面构造方法的时候,底层会创建一个长度是size的char数组
* public BufferedReader(Reader r,int size);
* 成员方法:
* String readLine();//如果没有数据则返回null
*
* InputStreamReader:
* 构造方法:
* public InputStreamReader(InputStream is);
* public InputStreamReader(InputStream is,String charsetName);
* 转换流
* BufferedWriter:
* 构造方法:
* //调用下面构造方法的时候,底层会创建一个长度是8192的char数组
* //写出数据线存入8192的char数组,直到char数组存满了,或者显示的调用flush方法
* //会把char数组中的内容转换存入到byte数组中,再把byte数组中的数据写出去。
* //和直接使用FileWriter的区别在于,字符转换字节的次数(效率)不相同,写出次数是相同的。
* public BufferedWriter(Writer w);
* //调用下面构造方法的时候,底层会创建一个长度是size的char数组
* public BufferedWriter(Writer w,int size);
*
* OutputStreamWriter:
* 构造方法:
* public OutputStreamWriter(OutputStream os);
* public OutputStreamWriter(OutputStream os,String charsetName);
* 打印流
* PrintStream:属于字节输出流
* 构造方法:
* public PrintStream(String path);
* public PrintStream(File path);
* 成员方法:
* void println(Object obj);
* void print(Object obj);
*
* System类:
* static void setOut(PrintStream ps);//改变打印的流向,默认是控制台
*/
各种流的方法概念,林林总总都在这里,有需要的朋友可以收藏!