常用IO流分类 使用场景 注意事项等
描述下JavaSE中的常用IO流、对IO流操作过程中的注意事项、说明常用IO流的使用场景
个人理解: 几乎所有的程序都离不开信息的输入和输出,比如从键盘读取数据,从文件中获取或者向文件中存入数据,在显示器上显示数据。这些情况下都会涉及有关输入/输出的处理。 在Java中,把这些不同类型的输入、输出源抽象为流(Stream),其中输入或输出的数据称为数据流(Data Stream),用统一的接口来表示。而数据流是指一组有顺序的、有起点和终点的字节集合. IO流就是用来处理设备之间的数据传输,上传文件和下载文件,Java用于操作流的对象都在IO包中.IO流按不同规则可以分为以下几种情况: 1.IO流按照流的方向可以分为2类,分别为: 输入流 :将外部的某些数据读取到内存中来的流, 比如读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。InputStream Reader 输出流 :将程序内存中的数据写出到数据目的地的流, 比如把程序(内存)中的内容输出到磁盘、光盘等存储设备中。 OutpuStream Writer 2.按照处理的最小单位也可以分为2类,分别为: 字节流:每次读取(写出)一个字节,当传输的资源文件有中文时,就会出现乱码。 InpuStream OutputSteam 字符流:每次读取(写出)两个字节,有中文时,使用该流就可以正确传输显示中文。 Reader Writer 字符流只能处理文本数据,在处理文本数据上比较方便。字符流本质上也是字节流,是一种带封装的字节流,是一种具有将字节数据转换为字符数据功能的流。 字节流所有的数据都能处理,但是处理文本数据不如字符流方便。字节流的功能更加强大。 3.根据处理的数据源不同分类,也可以分为2类,分别为: 节点流:直接和数据源相连, 从或向一个特定的地方(节点)读写数据的流。FileInputStream、FileOutputStream、FileReader、FileWriter 处理流:也叫包装流,是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader。处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。BufferedInputStream、BufferedOutputStream,BufferedReader、BufferedWriter
使用IO流的注意事项: 许多IO操作都可能会抛出IOException异常,比如read、write、close操作。IO流使用完应按顺序及时关闭不使用的流,不然可能造成资源流失,导致内存溢出. 在使用IO流时,首先自己要知道是选择输入流还是输出流。这就要根据自己的情况决定,如果想从程序写东西到别的地方,那么就选择输入流,反之就选输出流;然后考虑你传输数据时,是每次传一个字节还是两个字节,每次传输一个字节就选字节流,如果存在中文,那肯定就要选字符流了。通过前面两步就可以选出一个合适的节点流了,比如字节输入流 InputStream,如果要在此基础上增强功能,那么就在处理流中选择一个合适的即可。 在工作中的运用场景: 在使用shiro框架时,官方提供的shiro-ehcache技术中,在注入EhCacheManager对象读取xml时使用到了InputStream流. 在使用分布式文件存储服务FastDFS上传下载文件时,使用到了IO流.