0


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);//传入字节输出流类型对象,并且可以指定缓冲区大小             ![](https://img-blog.csdnimg.cn/089d5f08d2e34723a3de1e076ee1ac89.png)

构造方法: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);//使用指定的字符编码读取数据

     

           
标签: java

本文转载自: https://blog.csdn.net/LX_1234567/article/details/125829611
版权归原作者 你不懂我的风花雪月 所有, 如有侵权,请联系我们删除。

“Java 中常用的IO流”的评论:

还没有评论