Java 中常用的IO流

Java中的IO流也是也是我们经常用的的比较重要的类,下面就简单介绍下我们常用的几种IO流。

其中比较重要的流就是字节/字符输入(I)和字节/字符输出流(O),这里说的输入和输出的基准是针对计算机的内存,把数据写入内存就是输入,把数据写出内存就是输出,下图就是关于字节输入/输出流,字符输入/输出流以及常用子类的示意图。

1.字节输出流(OutputStream 抽象父类):将内存中的数据写入到磁盘中

常用方法:

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

                void  write(byte[]  b);//将byte数组中的数据写出去

                void  write(byte[]  b,int  offset,int  len);//将byte数组中从索引值offset位置开始,长度为len的数据写出到磁盘中

                void  flush();//刷新(清空)缓冲区,在字节缓冲输出流用的比较多

                void  close();//释放资源

因为它是一个抽象父类,没有办法直接new,所以还需先介绍一下它的常用子类:

常用子类1:FileOutputStream  以下是它常用的几个构造方法

                public FileOutputStream(String pathname)//传入String类型的参数

                public  FileOutputStream(File  patname);//传入File类型参数

                public  FileOutputStream(String  pathname,boolean  append);//传入String类型参数,并判断是否覆盖原来数据,覆盖为false,不覆盖为true

                public  FileOutputStream(File  Pathname,boolean  append);//传入File类型的参数,并判断是否覆盖原来数据,覆盖为false,不覆盖为true

(需要注意的是,以上四个构造方法底层其实都是第四个构造方法,后面没有写布尔值参数,所以默认都是false覆盖),下图中就是几个常用方法的使用。

常用子类2:BufferedOutputStream(字节缓冲输出流) 以下是它常用的构造方法:

                    public  BufferOutputStream(OutputStream  os);//传入字节输出流类型对象

调用此构造方法时,底层会创建一个长度是8192的byte数组,当调用write方法写出数据时,数据会被存储在这个8192的数组中,当该数组存满时,或者调用close(flush)方法时,就会把缓冲区中的数据写出去(如果没有存满,并且不调用close/flush方法时,数据是不能写出到磁盘中的)

                public  BufferedOutputStream(OutputStream  os,int size);//传入字节输出流类型对象,并且可以指定缓冲区大小             

构造方法:public  ObjectOutputStream(OutputStream os);//传入字节输出流类型对象

成员方法:void  writeObject(对象名);//写出对象

常用子类3:打印流(PrintStream)  

                成员方法:①void  println();//无参构造,默认打印到控制台

                               ② void  println(参数);//有参构造,默认打印到控制台

                构造方法:①public  PrintStream(String pathname);//传入打印地址,String类型参数

                                  ②public  PrintStream(File  Pathname);//传入File类型对象,改变打印地址

在配合上System.SetOut(PrintStream  ps)方法,就可以改变我们打印的流向 

 2.字节输入流(InputStream 抽象父类):将磁盘中的数据读取到内存中

常用方法:     

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

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

                ③void  close();//释放资源    

如下图所示,我在桌面建了文件,里面存储了一些dadafafaf数据,然后如下图所示,利用read方法读取数据,结果如下:

 常用子类1:FileInputStream,以下是它常用的两个构造方法:

        构造方法:public  FileInputStream(String  Pathname)//传入String类型的文件地址

                          public  FileInputStream(File  Pathname)//传入file类型参数

常用子类2:BufferedInputStream(字节缓冲输入流)以下是它常用的两个构造方法:

        构造方法:①public BufferedInputStream(InputStream  is)//传入InputStream类型的对象

       调用这个构造方法的时候,底层会创建一个长度为8192的byte的数组,当第一次数据的时候读取的数据会先存入这个8192的byte数组中,然后从对应的位置获取元素进行操作。

                        ②public  BufferedInputStream(InputStream is,int size)//同样可以传入InputStream类型的对象,但是这个构造方法可以指定缓冲去的大小,可以传入对应数组长度

3.字符输出流(Writer  抽象父类)

        成员方法:  ①void  writer(int  b);//写出一个字符

                           ② void  writer(char[]  ch);//将char数组中的数据写出去

                           ③ void  writer(char[]  ch,int  offset,int len);//将char数组中索引值为offset长度为len的数据写出去

                           ④ void  writer(String  str);//写出一个字符串类型的数据

                            ⑤void writer(String str,int offset,int len);//将字符串中的数据从offset开始,长度为len的数据写出去

                            ⑥void  flush();//把缓冲区中的数据写出去

                           ⑦void  close();//关闭流,释放资源,在关闭流之前会把缓冲区的数据写出去

常用子类1:FileWriter:

        需要注意的是FileWriter在调用构造方法的时候,底层会创建一个长度是8192的byte数组(缓冲区),当缓冲区的数据存满了之后就会把缓冲区的数据写出去

构造方法:

       ① public  FileWriter(String pathname,boolean  append);//传入String类型参数,并判断是否覆盖原来数据,默认是不覆盖就是true,如果要覆盖就传入false

        ②public  FileWriter(File  Pathname,boolean  append);//传入File类型参数,并判断是否覆盖默认是不覆盖就是true,如果要覆盖就传入false

常用实现类2:BufferedWriter(字符缓冲输出流)

构造方法:

        ①public  BufferedWriter(Writer  w);//传入Writer类型对象

调用此方法时,底层会创建一个8192的char数组,当调用writer()写出方法时,会把数据写出到8192的char数组中,当char数组中存不下数据时,会将这些数据统一进行转换成byte数组,然后存入8192的byte数组中,然后再把byte数组中的数据写出去

        ②public  BufferedWriter(Writer  w,int size);//传入Writer类型的数据,并且可以指定缓冲区的大小

常用实现类3:字符转换输出流(OutputStreamWriter)

构造方法:

         ①public  OutputStreamWriter(OutputStream  os);//传入字节输出流类型参数,使用默认的字符编码写出数据

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

4.字符输入流(Reader 抽象父类)

常用方法:①int  read();//读取一个字符的数据,如果没有读取到就返回-1

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

                  ③void close();//释放资源

常用子类1:FileReader

        构造方法:

需要注意的是我们在调用以下构造方法时,底层会创建一个长度为8192的byte类型数组,当数据量大的时候,每次会读取8192字节的数据,数据量小有多少读多少

        ①public  FileReader(String pathname);//传入String类型参数

        ②public  FileReader(File  pathname);//传入File类型参数

 常用子类2:字符缓冲输入流(BufferedrReader)

                构造方法:

和字符缓冲输出流的原理相似,在调用构造方法时,底层会创建一个长度为8192char数组,在读取数据时,会先把读取的数据存储到长度为8192的byte数组中,然后再把char数组中的数据全部转换成char类型,然后从char数组中对应的位置来获取元素进行操作

                ①public  BufferedReader(Reader  r);//传入字符输入流类型参数

                ②public  BufferedReader(Reader  r,int size);//传入字符输入流类型参数,并且指定缓冲区大小

                成员方法:String  readLine();//读取一行数据,没有则返回null

常用子类3:字符转换输入流(InputStream)

                构造方法:①public  InputStreamReader(InputStream  is);//使用默认字符编码读取数据

                                  ②public  InputStreamReader(InputStream  is,String charsetName);//使用指定的字符编码读取数据

         

               

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值