理解数据流

数据流(Stream)是一组有顺序的,有起点的,有终点的字节集合,是对输入和输出的总称和抽象。

一般地,数据流分为 输入流(InputStream)和输出流(OutputStream)。输入流只能读不能写,而输出流只能写不能读。通常程序使用输入输出流,就好像数据流入程序,或从程序流出。

Java 程序通过流来完成输入输出。 流通过 java 的输入输出系统与物理设备连接,尽管与它们连接的物理设备不尽相同,所有流的行为具有同样的方式。这样,相同的输入输出类和方法适用于所有类型的外部设备。这意味着一个输入流能够抽象多种不同类型的输入:从磁盘文件,从键盘或从网络套接字。同样,一个输出流可以输出到控制台,磁盘文件或相连的网络。流是处理输入输出的一个简便的方法。

把输入流的指向称作为数据源(Data Source),把输出流的指向称作数据接收器(Data Sink),程序从数据源读入数据,向接收器写数据,如下示意图:

java 流的划分

Java2 定义了两种类型的流: 字节流 和 字符流。字节流(Byte Stream)为处理字节的输入和输出提供了方法。例如:使用字节流读取或书写二进制数据。字符流(Character Stream)为 字符的输入和输出提供了方便。它们采用了统一的编码标准,因而可以国际化。 在某些场合,字符流比字节流更有效。

需要说明的是,在最底层,所有的输入输出都是字节形式的。基于字符的流只为处理字符提供方便有效的方法。

字节流类

字节流在顶层由两个抽象类:InputStream 和 OutputStream。每个抽象类都有多个具体的子类,这些子类对不同的外设进行处理,例如磁盘文件,网络连接,甚至是内存缓冲区。

字节输入流 如下图所示,灰色背景的类在使用的时候,需要具体的物理设备,如文件、数组、管道等。白色背景的类(抽象类除外)在使用时,需要其他流的支持。    字节输入流的说明如下:

流描述InputStream表示输入字节流的抽象类FileInputStream文件字节输入流ByteArrayInputStream字节数组输入流,把字节数组作为数据源FilterInputStream过滤字节输入流,提供扩展功能的输入流PipedInputStream管道输入流,可用于线程之间通信ObjectInputStream对象输入流SequenceInputStream顺序输入流,把多个流顺序合并成一个流AudioInputStream音频输入流BufferedInputStream缓冲输入流CipherInputStream加密输入流,在输入过程中,对数据进行加密或解密DataInputStream包含读取 Java 标准数据类型方法的输入流DigestInputStream摘要数据流,在输入过程中,生成流的数组摘要ProgressMonitorInputStream过程监视输入流PushbackInputStream能够向输入流退回一个字节的输入流

字节输出流的说明如下:

流描述OutputStream表示输出字节流的抽象类FileOutputStream文件字节输出流ByteArrayOutputStream字节数组输出流,把字节数组作为数据接收器FilterOutputStream过滤字节输出流,提供扩展功能的输出流PipedOutputStream管道输出流,可用于线程之间通信ObjcetOutputStream对象输出流BufferedOutputStream缓冲输出流CipherOutputStream加密输出流,在输出过程中,对数据进行加密或解密DataOutputStream包含写 Java 标准数据类型方法的输出流DigestOutputStream摘要数据流,在输出过程中,生成流的数字摘要PrintStream打印流,包含 print() 和 println()的输出流

抽象类 InputStream 和 OutputStream 定义了实现其他流类的关键方法。最重要的两种方法时 read() 和 write() ,它们分别用于读写字节。 两种方法都在 InputStream 和 OutputStream 中被定义为抽象方法。它们被派生的流类重写。

字节流中还有一个流:RandomAccessFile ,支持随机地存取文件中的内容。

字符流类

字符流类顶层由两个抽象类:Reader 和Writer。这些抽象类处理统一编码的字符流。java 中有多个具体的子类。

字符输入流的描述

流描述Read表示字符输入流的抽象类BufferedReader带缓冲功能的字符输入流CharArrayReader把字符数组作为输入源的输入流FilterReader过滤字符输入流InputStreamReader字节流向字符流转化流PipedReader管道字符输入流StringReader把字符串作为数据源的输入流LineNumberReader能够统计行数的输入流PushbackReader能够向输入流退回一个字符的输入流FileReader文件字符输入流

字符输出流的描述

流描述Writer描述字符输出流的抽象类BufferedWriter带缓冲功能的字符输出流OutPutStreamWriter字节输出流向字符输出流的转换CharArrayWriter把字符数组作为数据接收器FilterWriter过滤字符输出流PipedWriter管道字符输出流PrintWriter打印字符输出流,类似于PrintStreamStringWriter把字符串作为数据接收器FileWriter文件字符输出流

抽象类 Reader 和 Writer 定义了几个实现其他流类的关键方法。其中两个最重要的是 read() 和 write() ,它们分别进行字符数据的读 和 写。这些方法被派生流类重写。

java中的输入输出流概念_java输入输出--I/O流的概念和划分相关推荐

  1. Java中的输入输出流

    文章目录 1 File类 1.1 File类的常用用法 2 字节流 2.1 字节输入流InputStream 2.1.1 字节输入流整体框架 2.1.2 FileInputStream的常用用法 2. ...

  2. Java中字节输入输出流

    这里的输入和输出是相对于我们的java代码而言的,所谓字节输入流,也就是读取到我们的程序中,字节输出流是写入到我们的文件中 字节输入流 InputStream:这个抽象类是表示输入字节流的所有类的超类 ...

  3. java的格式输入语句是_java输入输出语句是什么

    对于经常上机刷题的来说,首先得解决输入输出方法,Java的输入输出流在Java学习过程的后面部分才会接触,但是我们可以掌握一些简单的,常用的输入输出方法 输出流 java常用的输出语句有下面三种: S ...

  4. java中自定义输入数字格式_Java 创建并使用自定义数字格式、35;###、####.#####和语言环境...

    import java.util.*; import java.text.*; /* nowjava - 时代Java 提 供 */ public class DecimalFormatDemo { ...

  5. 在java中如何输入_java如何输入

    ❶ java 如何从键盘上接受输入 public class import { public static void main(String[] args) { System.out.println( ...

  6. java中的in的语法_java的输入语法

    同学,你好 c语言面向过程 而java面向对象 所以用java做事前肯定要先创建对象啦 java中的输入语句 先创建Scanner对象 Scanner对象 Scanner sc = new Scann ...

  7. java中System重定向输出流

    java中System重定向输出流_javasunboy_新浪博客 java中System重定向输出流 (2011-10-25 18:01:48)     转载▼ 标签: java     日志文件 ...

  8. Java中如何输入一个字符串

    Java中如何输入一个字符串 首先需导入java.util包中的Scanner类,如图: 接着在main里创建Scanner类对象,记得要把System.in加上这是专门获取用户输入的内容的,它会交给 ...

  9. Java中键盘输入一个数组的具体操作及说明

    在java中需要输入一个数组,再对输入的数组进行一些基本操作.这里给出了"(2)键盘输入一个数组:(2)计算数组和:(3)计算数组中的最大值 "的完整代码. import java ...

最新文章

  1. MySQL常用简单小命令
  2. android-侧滑菜单
  3. Java黑皮书课后题第6章:*6.20(计算一个字符串中字母的个数)编写一个方法,使用下面的方法体计算字符串中的字母个数。编写一个测试程序,提示用户输入字符串,然后显示字符串中的字母个数
  4. 如何实现office不同语言界面切换
  5. 剑指offer:50-53记录
  6. 安全和隐私:您知道系统中潜藏着什么吗?
  7. MyBatis缓存结构
  8. 【新手上路常见问答】关于物联网设计
  9. 从零开始学习CANoe 系列文章目录汇总
  10. 钉钉日志范文100篇_钉钉日志,让领导看得见你的工作
  11. Lecture 005-Duality theory
  12. Java 解析Tiff深入研究
  13. 为计算机房的电脑安装防火墙和杀毒软件,杀毒软件和防火墙的关系,哪个重要...
  14. Hadoop实例学习(八)全排序和区排序
  15. 【Linux命令】挂盘相关命令,包含可扩展硬盘
  16. np.savetxt保存时数据不使用科学计数法形式
  17. Updating...门店零售业数据分析实战
  18. ADC转换汇总(STM32、取平均、精度等)
  19. SAP系统实际应用中的十大难题
  20. activiti表结构 .pig4cloud

热门文章

  1. 警方试验发现G网手机可使验钞机暂时失灵
  2. 购物兔入驻百度开放平台,极度方便用户!
  3. Flash movie not yet registered
  4. css,一些经常忘掉的简单布局 笔记
  5. 微软IE10之屌丝体验点评
  6. 京东自动签到脚本_京东618瓜分10亿,全自动任务脚本,躺着挣钱~
  7. 某年级三个班的Java考试成绩如下表所示,请采用二维数组保存这些数据(Java实验)
  8. 任务悬赏平台源码是什么?
  9. linux查看程序recvfrom,linux udp 客户端recvfrom,一直没有数据接收,谁能帮看看这代码哪里出了问题了????...
  10. 微信小程序中使用form表单