流:
* 输入流和输出流:字节流和字符流。
* 输入和输出:基准是内存,
* 数据进入内存:就叫输入
* 输出写出内存:就叫输出
* 下面所有的类,都属于java.io包下的。
字节输入流(InputStream抽象类):
* 常用方法:
* int read();//读取一个字节的数据,返回读取的数据。没有数据则返回-1
* int read(byte[] b);//读取数据存入byte数组中,返回读取的长度。没有数据则返回-1。
* void close();
* 常用子类:FileInputStream
* 构造方法:
* public FileInputStream(String pathname);
* public FileInputStream(File pathname);
字节输出流(OutputStream抽象类):
* 常用方法:
* void write(int i);//写出一个字节的数据
* void write(byte[] b);
* void write(byte[] b,int offset,int len);
* void flush();//刷新(清空)缓冲区。
* void close();
* 常用子类:FileOutputStream
* 构造方法:
* //当参数的某一个目录不存在,会抛出FileNotFoundException
* public FileOutputStream(String pathname);
* public FileOutputStream(File pathname);
* public FileOutputStream(String pathname,boolean append);
* public FileOutputStream(File pathname,boolean append);
* 这四个构造方法其实底层最终使用的是第四个构造方法。
* 前面两个构造方法,布尔值参数默认是false(表示覆盖)
* 注意事项:底层数据的传输来说只有字节流,没有字符流。
字符输入流(Reader抽象父类):
* 常用方法:
* int read();//读取一个字符(注意中文)的数据,如果没有读到数据则返回-1
* int read(char[] ch);//读取数据,存入char数组中,返回读取的长度,如果没有数据则返回-1
* void close();//释放资源
* 常用子类:FileReader
* 构造方法:
* //调用下列构造方法的时候,底层会创建一个长度是8192的byte数组
* //每次读取8192字节的数据(数据量大,数据量小有多少多多少)
* public FileReader(String pahtname);
* public FileReader(File pahtname);
字符输出流(Writer抽象父类):
* 成员方法:
* void write(int b);//写出一个字符的数据
* 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
* 构造方法://默认是false,表示覆盖
* //调用下列构造方法,底层会创建一个长度是8192的byte数组(缓冲区)
* //当缓冲区中的数据满了,存不下了会自动把缓冲区中的数据写出去
* public FileWriter(String pathname);
* public FileWriter(File pathname);
* public FileWriter(String pathname,boolean append);
* public FileWriter(File pathname,boolean append);
System类:
* static String lineSeparator();//获取操作系统的换行符
Properties是Hashtable的子类:
* 所属包:java.util;
* 构造方法:
* public Properties();
* 成员方法:
* Object setProperty(String key,String value);
* String getProperty(String key);
* Set<String> stringPropertyNames();
* void store(OutputStream os,String comments);
* void store(Writer w,String comments);
* void load(InputStream is);
* void load(Reader is);
* 字节缓冲输入流和字节缓冲输出流作用:较少IO次数,提高IO的效率。
字节缓冲输入流(InputStream):
* 常用子类:
* FileInputStream
* BufferedInputStream:
* 构造方法:
* //调用下面这个构造方法的时候,底层会创建一个长度是8192的byte数组
* //当第一次读取的时候,会读取数据存入该byte数组中
* //然后从该数组对应位置获取元素,进行操作
* public BufferedInputStream(InputStream is);
* //下面这个构造方法可以自己指定缓冲区大小
* public BufferedInputStream(InputStream is,int size);
字节缓冲输出流(OutputStream):
* 常用子类:
* FileOutputStream
* BufferedOutputStream:
* 构造方法:
* //调用下面这个构造方法的时候,底层会创建一个长度是8192的byte数组
* //当写出数据的时候,会被数据存储在这个8192的byte数组中
* //当该数组存不下数据,或者显示的调用了flush(close)方法,才会把缓冲区中的数据写出去
* public BufferedOutputStream(OutputStream os);
* //通过下面的构造方法,可以指定缓冲区的大小
* public BufferedOutputStream(OutputStream os,int size);
字符缓冲输入流(Reader):
* 常用子类:
* FileReader
//调用FileReader的时候,底层会创建一个长度是8192的byte数组
* BufferedReader:
* 构造方法:
* //调用下面这个构造方法的时候,底层会创建一个长度是8192的char数组
* //调用读取方法,把数据读取存入8192的byte数组
* //把8192byte数组中的数据统一转成字符存入8192的char数组中
* //从char数组中的对应位置获取元素,进行操作
* public BufferedReader(Reader r);
* public BufferedReader(Reader r,int size);
* 成员方法:
* String readLine();//读取一行数据,如果没有数据则返回null
* //字符输入流和缓冲字符输入流读取数据,读取的次数是一样的
* //高效体现在字节到字符的转换。
* InputStreamReader://转换输入流
* 构造方法:
* //这个构造方法读取数据使用的是默认的字符编码(UTF-8)
* public InputStreamReader(InputStream is);
* //这个构造方法读取数据使用的是自己指定的编码
* public InputStreamReader(InputStream is,String charsetName);
字符缓冲输出流(Writer):
* 常用子类:
* FileWriter
* //调用FileWriter的时候,底层会创建一个长度是8192的byte数组
* BufferedWriter
* 构造方法:
* //调用下面这个构造方法的时候,底层会创建一个长度是8192的char数组
* //调用写出方法的时候,会把数据写出到8192的char数组中
* //当8192的char数组存不下数据的时候,会统一进行转换(成byte)
* //存到8192的byte数组中,然后把8192byte数组中的数据写出去
* public BufferedWriter(Writer w);
* //调用下面这个构造方法可以自己指定缓冲区的大小
* public BufferedWriter(Writer w,int size);
* 成员方法:
* void newLine();//写出一个换行
* //字符缓冲输出流的高效体现在 字符到字节的转换上, //写出次数这两种(FileWriter、BufferedWriter)是一样的
OutputStreamWriter://转换输出流
* 构造方法:
* //使用默认的字符编码写出数据
* public OutputStreamWriter(OutputStream os);
* //使用自己指定的字符编码写出数据
* public OutputStreamWriter(OutputStream os,String charsetName);
序列化操作,对象输出流写出对象
注意事项:
a.序列化的对象必须是Serializable类型 Serializable是接口
b.成员变量的类型也必须是Serializable类型
c.使用transient关键字修饰的成员变量可以不进行序列化
反序列化操作,对象输入流读数据进来转换成对象
注意事项:
a.序列化后,类文件结构不能改变,如果改变了反序列化就会报错。如果不能保证不修改类文件结构,则可以在该类中添加一个成员变量(常量):serialVersionUID。有自动添加功能,鼠标在类名,选第一个。
PrintStream:打印流
* 成员方法:
* void println();
* void print(参数);
* 构造方法:
* public PrintStream(String pathname);
* public PrintStream(File pathname);