Java的IO系统是用来进行输入和输出的,Java系统本身提供了非常丰富的类库,利用这些类库几乎可以进行一切

的IO操作,但要彻底弄明白这些类的用法和它们之间的关系却并还容易,笔者总结了一些学习Java IO的思路,

希望对大家能有帮助。
一、明白Input、Output、Read、Write、Stream的含义。

很多时候在Java中使用IO的时候,都是这几个关键字交叉混合使用,一不小心就容易弄迷,要明这四个关键字,就要把握住一点,Java中IO的所有操作就是两类,输入和输出,而所谓的输入、输出都是站在程序的角度而言的。

比如要通过一个程序,往硬盘中写入一个文件,对程序而言,肯定是程序在源源不断的把数据往硬盘上放,对程序而言它是在Output,也就是在往出Write,所以Output总是Write对应,表达的是输出的意思。

反过来,要通过一个程序把内存中的数据取出来,那么程序要做的工作就是源源不断的把内存中的数据往外拿,就要不断的去读,从程序的角度看,是有数据不断的往程序里放,这样就是Input,它在Input的时需要不断的Read,所以Input总是Read对应。

stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在Java的IO中,所有的stream都包括Input和Output两种类型。

二、JavaIo的分类
2.1对IO的分类:
 所有JavaIO都可以分成两类:
 输入流:
 输出流:
2.2对输入输出的分类:
 所有的输入流、输出流都可以分为字节(输入、输出)流,字符(输入、输出)流,处理字节的主要是(OutputStream/InputStream) 系列,处理字符的,主要是(Reader/Write)系列
 
2.2.1以字节(Byte)为导向的输入流(InputStream系列):
1) ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用
2) StringBufferInputStream:把一个String对象作为InputStream
3) FileInputStream:把一个文件作为InputStream,实现对文件的读取操作
4) PipedInputStream:实现了pipe的概念,主要在线程中使用
5) SequenceInputStream:把多个InputStream合并为一个InputStream

2.2.2以字节(Byte)为导向的输出流(OutputStream系列):
1) ByteArrayOutputStream:把信息存入内存中的一个缓冲区中
2) FileOutputStream:把信息存入文件中
3) PipedOutputStream:实现了pipe的概念,主要在线程中使用
4) SequenceOutputStream:把多个OutStream合并为一个OutStream

2.2.3以Unicode字符为导向的输入流(Reader系列):

1) CharArrayReader:与ByteArrayInputStream对应
2) StringReader:与StringBufferInputStream对应
3) FileReader:与FileInputStream对应
4) PipedReader:与PipedInputStream对应

2.2.4以Unicode字符为导向的输出流(Write系列):

1) CharArrayWriter:与ByteArrayOutputStream对应
2) StringWriter:无与之对应的以字节为导向的stream
3) FileWriter:与FileOutputStream对应
4) PipedWriter:与PipedOutputStream对应

2.3对所有流的修饰、转换、封装而设置的流(Filter系列)

“修饰”流(这是我在这里起的一个形象的名字,文献中没有这种叫法)

输入系列:

2.3.1 用于封装以字节为导向的,以下主要是用来修饰InputStream系列的各种输入

1) DataInputStream:      从stream中读取基本类型(int、char等)数据。
2) BufferedInputStream:  使用缓冲区
3) LineNumberInputStream:会记录input stream内的行数,然后可以调用getLineNumber()和setLineNumber(int)
4) PushbackInputStream:   很少用到,一般用于编译器开发

2.3.2 用于封装以字符为导向的,以下主要是用来修饰Reader系列的各种输入
1) 没有与DataInputStream对应的类。除非在要使用readLine()时改用BufferedReader,否则使用

DataInputStream
2) BufferedReader:与BufferedInputStream对应
3) LineNumberReader:与LineNumberInputStream对应
4) PushBackReader:与PushbackInputStream对应

输出系列:

2.3.3 用于封装以字节为导向的,主要用来修饰OutputStream系列的各种输出
1) DataIOutStream:往stream中输出基本类型(int、char等)数据。
2) BufferedOutStream:使用缓冲区
3) PrintStream:产生格式化输出

2.3.4 用于封装以字符为导向的,主要用来修饰Write系列的各种输出
1) BufferedWrite:与对应
2) PrintWrite:与对应

三、一个特殊的类:RandomAccessFile
针对这个类,记住以下几点:
1) 可通过RandomAccessFile对象完成对文件的读写操作
2) 在产生一个对象时,可指明要打开的文件的性质:r,只读;w,只写;rw可读写
3) 可以直接跳到文件中指定的位置

四、总结:

4.1、节点流类型(一根管直接插到下面的类型上,下面的管道指的是线程和线和之间的通讯)
 
4.2、分类表:
类型                字符流                    字节流
File                FileReader    FileInputStream

FileWriter    FileOutputStream
 
Memory Array      CharArrayReader  ByteArrayInputStream 
                                CharArrayWriter  ByteArrayOutputStream

Memory String          StringReader   StringWriter

Pipe(管道)              PipedReader   PipedInputStream 
                                PipedWriter   PipedOutputStream

4.3、缓冲流要"套接"在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效
对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush方法将会使内在中的数据立刻写出

4.4、转换流
InputStreamReader和OutputStreamWriter用与字节数据到字符数据之间的转换
InputStreamReader需要和InputStream"套接"
OutputStreamReader需要和OutputStream"套接"

摘自: http://blog.csdn.net/softwater007/article/details/3331042

JavaIO系统解析相关推荐

  1. ToB产品设计:用户权限系统解析

    ToB产品设计:用户权限系统解析 文章以产品经理的角度思考,对权限系统的核心进行剖析,抽象出权限系统中的核心要素,并结合钉钉的一些做法对权限系统进行介绍. 一.什么是用户权限系统 权限管理系统是任何一 ...

  2. DNS 系统解析过程概述

    DNS(Domain Name Servive,域名服务)是Internet/Intranet中最基础也是非常重要的一项服务,提供了网络访问中域名到IP地址的自动转换.我们知道,Internet上的主 ...

  3. 基于机器视觉技术的瓷砖分色检测系统解析

    基于机器视觉技术的瓷砖分色检测系统解析 众所周知,采用喷墨技术的陶瓷生产,瓷砖的颜色.花纹.图案越来越多,表面越来越复杂.而依靠人工根据色差程度对瓷砖进行检测,容易受到各种不稳定因素干扰,导致错判.误 ...

  4. 文件岛 服务器大陆,重回文件岛《究极数码暴龙》奇遇系统解析

    由超人气动漫数码宝贝改编.饱含亿万粉丝的童年回忆的2015必玩精品手游<究极数码暴龙>,在近期正式上线,并登陆各大安卓渠道.在这掌中数码世界里,玩家们能寻回那些童年的记忆,重温那些年单纯的 ...

  5. 小蜜蜂商城系统解析,结合众筹卖货活动,流水千万

    小蜜蜂APP是一款专门为购物提供优惠的电商平台,其中有海量的购物优惠券,以及各种消费返利活动,让用户购物省钱的app.这期郭成功就给大家分析为什么小蜜蜂商城APP能够做起来的原因. 小蜜蜂商城系统解析 ...

  6. 苹果手机充值显示服务器异常,梦幻西游手游充值出现异常的iOS系统解析

    梦幻西游手游充值出现异常的iOS系统解析,目前iOS系统充值出现异常,如果您在充值时遇到 "iOS目前无法处理您的购买" 的问题,这个情况主要是由于苹果服务器存在问题导致的,目前会 ...

  7. 出行者信息服务器,出行者信息服务系统解析.ppt

    出行者信息服务系统解析.ppt ppt 制作 陈倩 ppt 审查 侯湘怡 讲解人 张怀韧 引言 出行者信息服务系统 一.出行者信息服务系统综述 二.出行者信息系统的系统构成及结构框架 三.出行者信息系 ...

  8. Tesla数据标注系统解析

    模型需要数据来驱动,模型决定上限,而数据帮助模型到达这个上限.自动驾驶时代,所有的感知任务最终都要在现实的3D世界中应用,数据集的规模也不再是几万张,几十万张,或者几百万张图片,与之前的情况已不可同日 ...

  9. 计算机游戏系统分析,《只狼:影逝二度》新手指南 全游戏系统解析!

    <只狼:影逝二度>新手指南 全游戏系统解析! 2019-03-20 22:29:25 32点赞 98收藏 44评论 本文由二柄APP编辑:地主撰写,转载请注明出处! 近日,魂系列大触Vaa ...

最新文章

  1. Spring security防止跨站请求伪造(CSRF防护)
  2. android判断是否json格式,Android判断json格式将错误信息提交给服务器
  3. RLE重铸回归方法的荣光后,回归和热图的异同究竟在何方?
  4. 批量获取远程计算机MAC
  5. c++ dll发消息到主窗口_PyQt5学习笔记(五)窗口图形绘制
  6. bme280 环境传感器开发板_半导体所在柔性湿度传感器与非接触控制方面取得进展...
  7. 教育|教授因被指控“奴役”博士生遭学校解雇,反手将学校告上法庭并获赔偿......
  8. 广船国际:“红帆”远航
  9. python usb摄像头 截图_python实现摄像头远程截图功能
  10. python画指北针_Python-geopandas 中国地图绘制
  11. NOIP 2018模拟赛 by zwz T3 磨懒虫主义
  12. 弘辽科技:手淘客是什么意思?如何去查看?
  13. 初识C语言--第二弹
  14. Java动态代理技术-我的浅显认识
  15. quartus仿真系列0:基于原理图仿真的基本操作
  16. 国外网盘休闲下载利器之:freeRapidDownloader 多国语言支持
  17. 基于stm32h743+rtthread的开源项目——板载资源介绍(一)
  18. 微观经济学14周作业(博弈论)
  19. 【JavaWeb】21 AJAX/XStream/JSON
  20. Vue+Echarts监控大屏实例六:智慧养老监控模板实例上

热门文章

  1. (C/C++)数据结构所需的程序语言基础(一)数据类型、运算符及表达式
  2. Excel同一单元格多数据如何求平均数
  3. Java中的数组利用键盘输入求平均数
  4. 百度地图经纬度转换腾讯地图经纬度
  5. Android性能优化系列:VSync、Choreographer 和 Render Thread
  6. hp打印机计算机无法与设备建立,hp 程序无法安装解决方法,hp打印机安装教程 电脑维修技术网...
  7. scanf()函数的用法
  8. byfen网java_用java编写程序根据考试成绩的等级打印出百分制分数段
  9. HLM(分层线性模型)处理“聚集性”问题!
  10. Mysql 和 Oracle 的基本知识总结