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

按照数据流的方向不同可以分为:输入流和输出流。

按照处理数据单位不同可以分为:字节流和字符流。

按照实现功能不同可以分为:节点流和处理流。

输出流:

输入流:

因此输入和输出都是从程序的角度来说的。

字节流:一次读入或读出是8位二进制。

字符流:一次读入或读出是16位二进制。

字节流和字符流的原理是相同的,只不过处理的单位不同而已。后缀是Stream是字节流,而后缀是Reader,Writer是字符流。

节点流:直接与数据源相连,读入或读出。

直接使用节点流,读写不方便,为了更快的读写文件,才有了处理流。

处理流:与节点流一块使用,在节点流的基础上,再套接一层,套接在节点流上的就是处理流。

Jdk提供的流继承了四大类:InputStream(字节输入流),OutputStream(字节输出流),Reader(字符输入流),Writer(字符输出流)。

下面是java IO流的结构示意图:

字符流:

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:该类实现缓冲的输出流。

流的操作规律:

1、明确源和目的。

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

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

2、操作的数据是否是纯文本数据?

如果是:数据源:Reader

数据汇:Writer

如果不是:数据源:InputStream

数据汇:OutputStream

3、虽然确定了一个体系,但是该体系中有太多的对象,到底用哪个呢?

明确操作的数据设备。

数据源对应的设备:硬盘(File),内存(数组),键盘(System.in)

数据汇对应的设备:硬盘(File),内存(数组),控制台(System.out)。

4、需要在基本操作上附加其他功能吗?比如缓冲。

如果需要就进行装饰。

/记住,只要一读取键盘录入,就用这句话。

BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

java i o是什么流_Java I/O 流,输入流、输出流相关推荐

  1. java文件与流_Java文件和流深入

    1.什么是数据流? 数据流是指所有的数据通信通道.有两类流,InputStream and OutputStream,Java中每一种流的基本功能依赖于它们.InputStream用于read,Out ...

  2. java 中的流_Java中的流(IO

    Java中的流(IO流. java.io包中定义了多个流类型(类或抽象类)来实现 输入 / 输出功能,可以从不同的角度对其进行分类: 按单位可分为: 字节流         (一个字节一个字节的读取) ...

  3. java io 转换流_Java编程IO流中的转换流

    对于IO流中的转换流,顾名思义,就是将字符流转换成字节流或者是将字节流转换成字符流的对象. 那么有时候我们得到的是一个字符流,但是我们又需要进行一些计算之类的,或者我们得到的是一个字节流,但是我们又需 ...

  4. java i o是什么流_Java I/O流介绍

    Java I/O流分为输入流输出流两大部分,任何自InputStream(字节输入流)和Reader(字符输入流)派生而来的类都含有read()基本方法,用来读取单个字节或一组字节数组.任何自Outp ...

  5. java文件与流_Java文件与流

    文件 文件管理通过java.io包下.file类 作用: 1.文件属性 2.文件检查 3.文件删除 4.不包含对其文件内容的处理 File类的构造 语法: File f =new File(Strin ...

  6. java i o是什么流_Java I/O流的总结

    I/O的类结构图 I/O的分类 根据处理的数据类型分为:字节流和字符流. 根据数据流向分为:输入流和输出流. 流又可分为节点流和处理流. 节点流 直接与数据源相连 处理流 与节点流一起使用,在节点流的 ...

  7. java装饰模式模拟流_Java 装饰模式 io流

    在Java IO流的API中,大量的使用了装饰模式. 现在笔者来阐述一下装饰模式. 装饰模式的角色: --抽象构件角色(Component): 给出一个抽象接口,以规范准备接收附加责任的对象. --具 ...

  8. java api限流_Java 9:流API的增强

    java api限流 Java 9向Stream接口添加了4种新方法: 1. dropWhile dropWhile方法类似于skip方法,但使用Predicate而不是固定的整数值. 当Predic ...

  9. java 网络通讯用什么流_Java中打印流,网络通信协议,TCP通信的基础介绍

    1-1.打印流 java.io.PrintStream:打印流 PrintStream 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式. PrintStream特点: 1).只负责数据 ...

最新文章

  1. 使用PostMan测试文件上传接口
  2. Jolt大奖作品、重磅星级图书尽在十月
  3. camera tweak android,苹果iPhone相机大提升 CameraTweak2超强大的拍照增强插件
  4. 蓝桥杯c语言a组2015,2015第七届蓝桥杯决赛C语言A组--穿越雷区(DFS)
  5. 菜鸟+Hologres=智能物流
  6. uos系统虚拟机_体验中兴深度联合推出的「UOS」统一操作系统
  7. ListT转换为DataTable
  8. mysql客户端登陆提示client option 'secure_auth' enabled错误
  9. 3G 资费 流量套餐
  10. iOS:对GCD中 同步、异步、并行、串行的见解
  11. 2022年给正在创作的程序员的实用工具
  12. Java实现语音阅读功能开发(输入文字,转语音播放)
  13. 视频监控国标协议介绍
  14. 传统语音识别介绍【一】—— 前端处理
  15. python3基础(廖雪峰)
  16. 北理工在线作业计算机的主要特点是( ),18春北理工《用户界面设计》在线作业-2...
  17. 求第N个素数的值,时间复杂度尽量低
  18. VS2010模仿QQ2011登陆界面
  19. 【读书2】【2014】基于MATLAB的雷达信号处理基础(第二版)——多普勒频移(1)
  20. 编码孔径成像-编解码孔径的设计(MURA均匀冗余阵列)

热门文章

  1. as3 的3Dwebgame引擎Dgame3D正式开源
  2. 系统调用-文件访问 创建、打开、关闭、读、写
  3. 依赖声明可以包含的元素
  4. 数组排列组合算法汇总
  5. 【致青春】我们挥霍时间的年代
  6. POJ 1095 Trees Made to Order
  7. brew 安装php7.1.6_mac上通过brew安装php7
  8. 【免费毕设】ASP.NET报名管理信息系统(源代码+lunwen)
  9. python uiautomation_使用python UIAutomation从QQ2017(v8.9)群界面获取所有群成员详细资料,...
  10. 辣条社区:问题解答、面试系列、求职助力、学习资源,你需要的都在这里