Java IO使用入门 -- IO其实很简单

总体结构

IO应该是平时项目里最常用到的功能了,无论是简单的文件读取,还是服务器端口监听,都会用到IO;但是,在面对Java IO包里庞杂的IO基础类库时,经常会很头大,是该选择InputStream还是应该选择Reader?应该为InputStream增加一个Buffer吗?如何根据应用场景选择合适的工具类是摆在很多代码人员面前的一个难题,这里我将Java IO包里的常用工具类做了一个梳理,包括它们的组织结构,功能特性,适用场景等,以方便后续使用时能方便快捷的根据需求选取最合适的IO类

java-io.png

根据解析图,从大的层面可以对IO进行两个维度的划分:

  1. 数据类型,即:字符 or 字节,类上对应于Writer/Reader or OutputStream/InputStream
  2. 操作类型,即:读取(输入) or 写入(输出),类上对应于Reader/InputStream or Writer/OutputStream

使用技巧

Java IO的所有操作都无外乎这两种维度四大主类的扩展,大部分比较简单,下面对于稍微难理解以及值得注意的点进行单独说明

  1. Java IO大量使用了Decorator模式,所以,一般在使用IO类库的时候都是采用Decorator的调用方式:
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
  1. 在Java IO中,无论是字符的读与写还是字节的读与写,基本都是一一对应的,换句话说,有一个特定读的类,一般就会有一个特定写的类,把握这一点,可以起到化繁为简的作用,如FileInputStreamFileOutputStream就分别对应于文件的读和写;PipedInputStreamPipedOutputStream分别对应于管道数据的读和写
  2. 如何区分读 or 写,这是一个经常会困扰新手的问题,这里我提供一个简单的区分方式:以你当前运行的程序作为基准(即调用IO的程序),数据从程序传至其它地方则为写(输出),数据从其它地方传至程序则为读(输入);如将程序产生的数据存放至日志文件中,那么就是写,从端口中取得数据并在程序中进行处理,则是读
r_or_w.png
  1. IO类使用技巧:根据要执行的动作以及目标数据类型,同时结合使用场景选择合适的IO类进行组装,注意上面一句话其实涉及到三个步骤:
    • 执行的动作,即是要读还是要写
    • 数据类型,即是字节还是字符,有的时候还需要字符与字节的转换(如OutputStreamWriter);如需要在网络上或内存里存储的数据,一般都是以字节的形式;又或者面对需要写文件的场景,如果是文本类文件,由于其本身就是字符编码所以一般采用字符形式,而对于图片,视频等文件则只能使用字节形式
    • 使用场景,其实使用场景需要分两步考虑,首先考虑显而易见的场景,如是文件的操作还是字符串的操作,抑或是管道通信;其次需要考虑性能,如对文件的写操作是否会比较频繁,若是,则建议通过BufferedWriter对其进行封装,因为每次都对少量数据进行文件打开并写入是一个效率很低的方式

总结

本文主要对基本的IO类做了简单的梳理,并就IO中的基本概念以及如何使用IO基础类库做了说明,当然,本文并未罗列所有的IO实现类,感兴趣的同学可以自己查看Java的文档或源码,同时本文也未阐述如何对已有的IO类库进行自定义扩展,一来这种扩展只需根据需求重写或增加特定方法即可,二来也是因为一般情况下Java提供的基础类库足以满足需求;另外Java在1.4后引入了NIO,即:No Blocking IO,它与原IO在使用场景上有一定区别,感兴趣的同学可以查看Java NIO vs. IO

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,764评论 18 399
  • tags:io categories:总结 date: 2017-03-28 22:49:50 不仅仅在JAVA领...
    行径行阅读 2,204评论 0 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,904评论 18 139
  • 听到这样一句话:不怕你不优秀就怕比你更优秀的人还在努力。 我永远也忘不了第一次去参加培训时遇到呢一群人,六六姐,文...
    叫_丫头阅读 964评论 0 0
  • 1941年,战火连天,德国潜艇队如狼群出没,频频袭击盟军运输船队,却在法国拉罗谢尔,遭受重创。英军派出强大的驱逐舰...
    邻院儿的摆摆阅读 3,355评论 2 3