IO流的概述

本文详细介绍了Java中的IO流,包括字节流、字符流、缓冲流、转换流和对象流等,阐述了它们的用途、常用方法及子类,如FileInputStream、FileOutputStream、FileReader、FileWriter等,并提到了缓冲区的作用和效率提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IO流概念io流的i代表input(输入),o也就是out代表输出,流就是流动的意思,输入端流动到输出端

IO流有字节输入流,字节输出流,字符输入流,字符输出流,缓冲字节输入输出流,缓冲字符输入输出流,转换流,对象流,打印流

 *         数据进入内存:读
 *         数据出内存:写
 * 
 *     下面所说的这些类都是在:java.io包下
 *         读写:操作的是文件
 *         底层传输的数据都是以字节的形式存在。
 * 
 *         字节输入流(InputStream):抽象类
 *             常用方法:
 *                 int read();//读取一个字节的数据,如果没有数据则返回-1
 *                 int read(byte[] b);//读取数据存入byte数组中,返回读取的长度,如果没有数据则返回-1
 *                 void close();
 * 
 *             常用子类:
 *                 FileInputStream:
 *                     构造方法:
 *                         public FileInputStream(String path);
 *                         public FileInputStream(File path);
 *                     
 * 
 *         字节输出流(OutStream):抽象类
 *             常用方法:
 *                 void write(int data);//写出一个字节的数据
 *                 void write(byte[] b);//写出byte数组中的数据
 *                 void write(byte[] b,int offset,int len);
 *                 void flush();
 *                 void close();
 *             常用子类:
 *                 FileOutputStream:
 *                     构造方法:
 *                        public FileOutputStream(String path); 
 *                        public FileOutputStream(File path); 
 *
 *                        //append为true:表示追加。  为false,表示覆盖
 *                        public FileOutputStream(String path,boolean append); 
 *
 *                        //这四个构造方法,最终使用的其实是这一个构造方法
 *                        public FileOutputStream(File path,boolean append); 
 * 
 *         字符输入流(Reader):抽象类
 *             常用方法:
 *                 int read();//读取一个字符的数据
 *                 int read(char[] ch);//读取数据存入char数组中,返回读取的长度,如果没有读到数据则返回-1
 *                 void close();
 *             常用子类:
 *                 FileReader:
 *                     调用下列构造方法的时候,底层会创建一个8192的byte数组。
 *                     调用读方法,每次回读取8192byte字节的数据,    我们需要的字符
 *                     是从byte数组的对应位置转换的来的。    
 *                     作用:减少读取的次数            
 * 
 *                     构造方法:
 *                         public FileReader(String path);
 *                         public FileReader(File path);
 * 
 *         字符输出流(Writer):抽象类
 *             常用方法:
 *                 void write(int data);//写出一个字符的数据
 *                 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:
 *                     调用下列构造方法创建对象的时候,底层会创建一个长度是8192的byte数组(缓冲)
 *                     我们写出的字符,会转换存入这个byte数组中。
 *                     当该byte数组存不下数据的时候,或者显示的调用flush方法,会把该byte数组中的数据写出去。
 *                     构造方法:
 *                         public FileWriter(String path);
 *                         public FileWriter(File path);
 *                         public FileWriter(String path,boolean append);
 *                         public FileWriter(File path,boolean append);

 *                          BufferedOutputStream:缓冲字节输出流
 *                     构造方法:
 *                         //调用这个构造方法,底层会创建一个长度是8192的byte数组
 *                         //写出的数据,存入缓冲区(8192的byte数组)中
 *                         //存满了,或者显示的调用flush(close)方法,会把缓冲区中的数据写出去
 *                         //有了缓冲区减少了写出的次数
 *                         public BufferedOutputStream(OutputStream os);
 *                         //调用这个构造方法,底层会创建一个长度是size的byte数组
 *                         public BufferedOutputStream(OutputStream os,int size);

 *                        BufferedWriter
 *                     构造方法:
 *                         //调用下面构造方法的时候,底层会创建一个长度是8192的char数组
 *                         //写出数据线存入8192的char数组,直到char数组存满了,或者显示的调用flush方法
 *                         //会把char数组中的内容转换存入到byte数组中,再把byte数组中的数据写出去。
 *                         //和直接使用FileWriter的区别在于,字符转换字节的次数(效率)不相同,写出次数是相同的。
 *                         public BufferedWriter(Writer w);
 *                         //调用下面构造方法的时候,底层会创建一个长度是size的char数组
 *                         public BufferedWriter(Writer w,int size);

 *                 BufferedReader
 *                     构造方法:
 *                         //调用下面构造方法的时候,底层会创建长度是8192的char数组
 *                         //每次调用读取方法,读8192byte的数据存入byte数组中
 *                         //把byte数组中的数据转换存入char数组中,直到char数组存满
 *                         //我们操作的数据是从char数组中对应位置获取
 *                         //和FileReader比较,读取次数是一样的。从byte转换为char转换次数不一样
 *                         public BufferedReader(Reader r);
 *                         //调用下面构造方法的时候,底层会创建一个长度是size的char数组
 *                         public BufferedReader(Reader r,int size);

 *                           对象流

 *                        BufferedReader:
 *                     构造方法:
 *                         //调用下面构造方法的时候,底层会创建长度是8192的char数组
 *                         //每次调用读取方法,读8192byte的数据存入byte数组中
 *                         //把byte数组中的数据转换存入char数组中,直到char数组存满
 *                         //我们操作的数据是从char数组中对应位置获取
 *                         //和FileReader比较,读取次数是一样的。从byte转换为char转换次数不一样
 *                           public BufferedReader(Reader r);
 *                         //调用下面构造方法的时候,底层会创建一个长度是size的char数组
 *                         public BufferedReader(Reader r,int size);
 *                     成员方法:
 *                         String readLine();//如果没有数据则返回null
 * 
 *                 InputStreamReader:
 *                     构造方法:
 *                         public InputStreamReader(InputStream is);
 *                         public InputStreamReader(InputStream is,String charsetName);

 *                        转换流

 *                         BufferedWriter:
 *                     构造方法:
 *                         //调用下面构造方法的时候,底层会创建一个长度是8192的char数组
 *                         //写出数据线存入8192的char数组,直到char数组存满了,或者显示的调用flush方法
 *                         //会把char数组中的内容转换存入到byte数组中,再把byte数组中的数据写出去。
 *                         //和直接使用FileWriter的区别在于,字符转换字节的次数(效率)不相同,写出次数是相同的。
 *                         public BufferedWriter(Writer w);
 *                         //调用下面构造方法的时候,底层会创建一个长度是size的char数组
 *                         public BufferedWriter(Writer w,int size);
 *                 
 *                 OutputStreamWriter:
 *                     构造方法:
 *                         public OutputStreamWriter(OutputStream os);
 *                         public OutputStreamWriter(OutputStream os,String charsetName);

 *                        打印流

 *     PrintStream:属于字节输出流
 *         构造方法:
 *             public PrintStream(String path);
 *             public PrintStream(File path);
 *         成员方法:
 *             void println(Object obj);
 *             void print(Object obj);
 * 
 *     System类:
 *         static void setOut(PrintStream ps);//改变打印的流向,默认是控制台
 */

各种流的方法概念,林林总总都在这里,有需要的朋友可以收藏!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值