IO流相关知识

流:

 *      输入流和输出流:字节流和字符流。

 *      输入和输出:基准是内存,

 *          数据进入内存:就叫输入

 *          输出写出内存:就叫输出

 *      下面所有的类,都属于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);     

猜你喜欢

转载自blog.csdn.net/m0_48011056/article/details/125942369
今日推荐