java IO流

认识io流

什么是io

io就是输入(in)和输出(out)指应用程序和外部设备之间的数据传递,常见的外部设备包括文件、管道、网络连接。

什么是流

流是一种抽象概念,比如我们在电脑上插入u盘把一个视频拷贝到电脑硬盘中,就可以看作u盘里的数据流向电脑硬盘中。

我们java中I/O操作主要使用Java.io包下的内容 进行输入输出操作。

根据数据的流向分为:

输入流:把数据从其他设备上读取到内存中的流。

输出流:把数据从内存中写出到其他设备的流。

顶级父类

输入流输出流
字节流字节输入流(InputStream)字节输出流(OutputStream)
字符流字符输入流(Reader)字符输出流(Writer)

OutputStream

 常用方法

              void write(int i);写出一个字节的数据

              void write(byte[] b);数据写入数组中

              void write(byte[] b,int offset,int len);从指定的字节数组写入 len字节,从偏移量 offset开始输出到此输出流。

               void flush();刷新(清空)缓冲区。

              void close();关闭流

常用子类:

FileOutputStream(输出字节流)

        构造方法

 public FileOutputStream(String pathname);

 public FileOutputStream(File pathname);

 public FileOutputStream(String pathname,boolean append);

 public FileOutputStream(File pathname,boolean append);

                这四个构造方法其实底层最终使用的是第四个构造方法。

              前面两个构造方法,布尔值参数默认是false(表示覆盖)写true表示继续添加

BufferedOutputStream(缓冲输出字节流)

         构造方法

调用下面这个构造方法的时候,底层会创建一个长度是8192的byte数组

当写出数据的时候,会被数据存储在这个8192的byte数组中

当该数组存不下数据,或者显示的调用了flush(close)方法,会把缓冲区中的数据写出去

 public BufferedOutputStream(OutputStream os);

通过下面的构造方法,可以指定缓冲区的大小

 public BufferedOutputStream(OutputStream os,int size);

ObjectOutputStream(序列化)

构造方法:

public ObjectOutputStream (OutoutStream out)

创建一个指定OutputStream的ObjectOutputStream。

该类必须实现java.io.Serializable 接口,Serializable是一个标记接口,不实现此接口的类将不会使任何状态序列化或反序列化,会抛出 NotSerializableException

该类的所有属性必须是可序列化的。如果有一个属性不需要可序列化的,则该属性必须注明是瞬态的,使用transient关键字修饰。

InputStream

        常用方法

               int read();读取一个字节的数据,返回读取的数据,如果没有数据则返回-1

               int read(byte[] b);读取数据存入byte数组中,返回读取的长度。如果没有数据则返回-1

               void close();关闭流

常用子类:

FileInputStream(输入字节流)

               构造方法:

    public FileInputStream(String pathname);参数写文件地址

     public FileInputStream(File pathname);参数写一个File对象

 BuffInputStream(缓冲输入字节流)

        构造方法:                                   

  public BufferedInputStream(InputStream is);

 ObjectInputStream(反序列化)

构造方法:

public ObjectInputStream(InputStream in)

反序列化流,将之前使用ObjectOutputStream序列化的原始数据恢复为对象。

序列化后,类文件结构不能改变,如果改变了反序列化就会报错(InvalidClassException)。如果不能保证不修改类文件结构,则可以在该类中添加一个成员变量(常量):serialVersionUID

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();//关闭流,释放资源。在关闭流之前会把缓冲区中的数据写出去

常用子类:

File Writer(字符输出流)

构造方法:默认是false,表示覆盖

调用下列构造方法,底层会创建一个长度是8192的byte数组(缓冲区)

当缓冲区中的数据满了,存不下了会自动把缓冲区中的数据写出去

               public FileWriter(String pathname);

               public FileWriter(File pathname);

               public FileWriter(String pathname,boolean append);

               public FileWriter(File pathname,boolean append);

BufferedWriter(缓冲字符输出流)

调用下面这个构造方法的时候,底层会创建一个长度是8192的char数组

调用写出方法的时候,会把数据写出到8192的char数组中

 当8192的char数组存不下数据的时候,会同一进行转换(成byte),

 存储到8192的byte数组中,然后把8192byte数组中的数据写出去

                           public BufferedWriter(Writer w);

调用下面这个构造方法可以自己指定缓冲区的大小

                           public BufferedWriter(Writer w,int size);

                        成员方法:

                       void newLine();写出一个换行

OutputStreamWriter(转换输出流)

构造方法

public OutputStreamWriter(OutputStream os);使用默认的字符编码写出数据

 public OutputStreamWriter(OutputStream os,String charsetName);使用自己指定的字符编码写出数据

Reader

 成员方法

    int read();读取一个字符的数据,如果 没有读到数据则返回-1

    int read(char[] ch);读取数据,存入char数组中,返回读取的长度,如果没有数据则返回-1

    void close();释放资源

常用子类:

File Reader(字符输入流)

构造方法:

              调用下列构造方法的时候,底层会创建一个长度是8192的byte数组

            (数据量大) 每次读取8192字节的数据,数据量小(有多少数据读多少)

              public FileReader(String pahtname);

              public FileReader(File pahtname);

 BufferedReader(缓冲字符输入流)

构造方法:

                  调用下面这个构造方法的时候,底层会创建一个长度是8192的char数组

                  调用读取方法,把数据读取存入8192的byte数组

                把8192byte数组中的数据统一转换成字符存入8192的char数组中

                 从char数组中的对应位置获取元素,进行操作

                   public BufferedReader(Reader r);

                   public BufferedReader(Reader r,int size);

      成员方法:

               String readLine();读取一行数据,如果没有数据则返回null

 字符输入流和缓冲字符输入流读取数据,读取的次数是一样的

                高效体现在字节到字符的转换。

 InputStreamReader(转换输入流)

  构造方法

  public InputStreamReader(InputStream is);这个构造方法读取数据使用的是默认的字符编码                    

  public InputStreamReader(InputStream is,String charsetName);这个构造方法读取数据使用的是自己指定的编码


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值