io流学习总结

来源:互联网 发布:如何做美工设计 编辑:程序博客网 时间:2024/05/22 03:39
Java.io.File类是针对文件进行操作的类,不能对文件内容进行操作
File类是文件路径的表示,一般用string类型来表示,File类可以对文路径进行创建,修改,删除等操作。(区分绝对路径和相对路径)


几种常见的io流




1、InputStream抽象类:继承自InputStream的流都是用于向程序中输入数据的,且数据的单位为字节(8位)。
   其中FileInputStream继承自InputStream,BufferedInputStream 可以对任何的InputStream流进行包装


2、OutputStream抽象类:继承自OutputStream的流是程序用于向外输出数据的,且数据的单位为字节(8位)。
   其中FileOutputStream继承自OutputStream,BufferedOutputStream 可以对任何的OutputStream流进行包装


3、Reader抽象类:继承自Reader的流都是用于向程序中输入数据的,且数据的单位为字符(16位)。其中FileReader继承自Reader,BufferedReader 可以对任何的Reader流进行包装,新增了readLine()方法用于一次读取一行字符串


4、Writer抽象类:继承自Writer的流是程序用于向外输出数据的,且数据的单位为字符(16位)。其中FileWriter继承自Writer,BufferedWriter 可以对任何的Writer流进行包装,新增了newLine()方法用于写入一个行分隔符


注意事项:用buffer的缓冲流,关闭io流前要对数据进行刷新处理!


Java中的流,可以从不同的角度进行分类。


转换流;


outputstreamWriter是Writer的子类,是将写出的字符流转换为字节流,需要和outputstream套接使用


inputstreamReader是reader的子类,是将输入的字节流转换为字符流,需要和InputStream套接使用


打印流: 


PrintStream和PrintWriter都属于输出流,分别针对字节和字符。
PrintStream和PrintWriter类都提供了一系列重载的print和println方法来输出各种类型的数据


注意事项;
read(byte[] b, int off, int len) //将最多 len 个数据字节从此文件读入 byte 数组
write(byte[] b, int off, int len) //将 len 个字节从指定 byte 数组写入到此文件


注意使用的编码要一样,否则会出现乱码! 默认GBK




按流的方向分:输入流和输出流。


输出流(从文件/网络/内存等(数据源)到程序):
字节流(读取8位二进制):后缀为Stream为字节流,字节流为万能流,效率比较低
字符流(读取十六位二进制)
输入流(从程序到文件/网络/内存等(数据源)):
字节流(读取8位二进制):后缀为Stream为字节流,字节流为万能流,效率比较低
字符流(读取十六位二进制)


按处理数据单位分:字节流和字符流。


按实现功能分:节点流和处理流。


============================================
 
字符流   (InputStreamReader:是字节流通向字符流的桥梁)


Reader:用于读取字符流的抽象类

(重点)BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。


LineNumberReader:跟踪行号的缓冲字符输入流。此类定义了方法setLineNumber(int)和getLineNumbner(),它们可分别用于设置和获取当前行号。


(重点)InputStreamReader:是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集


FileReader:用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader。




==================================================
 
Writer:写入字符流的抽象类。


(重点)BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。


(重点)OutputStreamWriter:是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。


FileWriter:用来写入字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。要自己指定这些值,可以先在 FileOutputStream 上构造一个 OutputStreamWriter。


==================================================


字节流:




InputStream:是表示字节输入流的所有类的超类。


FileInputStream:从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。


FileInputStream:用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader


FilterInputStream:包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能

BufferedInputStream:该类实现缓冲的输入流


================================================


OutputStream:此抽象类是表示输出字节流的所有类的超类。

FileOutputStream:文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流


FilterOutputStream:此类是过滤输出流的所有类的超类

BufferedOutputStream:该类实现缓冲的输出流。




===============================================


io流的造作规律


1. 明确源目标和目标地;

数据源:就是需要读取,可以使用两个体系:InputStream、Reader;
数据汇:就是需要写入,可以使用两个体系:OutputStream、Writer;

2.操作的数据是否是纯文本数据(确定使用字节流还是字符流)?


如果是:数据源:Reader
数据汇:Writer


如果不是:数据源:InputStream
数据汇:OutputStream


3.然后根据需要确定选择具体的io流


源目标对应的设备:硬盘(File),内存(数组),键盘(System.in)
目的地对应的设备:硬盘(File),内存(数组),控制台(System.out)。


4.确定是否需要附加功能;

缓冲:
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in))


BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out))
原创粉丝点击