一、IO流作用

IO流就是用来处理设备上的数据,包括文件,磁盘,网络等

二、分类

按处理的数据类型不同:字符流、字节流

按流向不同:JAVA 中流的处理是单向的,分为输入流和输出流

三、抽象类

1、字节流抽象类

InputStream 输入流

OutputStream输出流

2、字符流抽象类

Reader 输入字符流

Writer 输出字符流

四、JAVA中流体系架构

有一些对流进行操作的基本的方法,我们以文件输入输出流进行说明:

1、InputStream是所有的输入字节流的父类,它是一个抽象类

假如有个文件a.log 里面存放的数据是

(1)read() 从输入流中读取数据的下一个字节,返回0到255范围内的int字节值

通常的用法是

返回值

(2)read(byte[]) 从输入流中读取的一定数量字节数并将它们存储到缓冲区数组中

通常的用法是:

返回值为:

aaa

2、OutputStream是所有输出字节流的子类,他也是一个抽象类

(1)write(int) 写入一个0-255范围的int字节到输出流

然后我们发现b.log里的内容为a:

(2)write(byte[]) 写入byte数组中的数据到输出流

然后我们发现b.log文件中的数据为123

3、Reader是所有的输入字符流的父类,它是一个抽象类

简单使用方式同InputStream,例子如下

4、Writer是所有的输出字符流的父类,它是一个抽象类

简单使用方式同OutputStream,例子如下

写入到b.txt文件的数据

五、IO流中的设计模式

JAVA中的IO流有很多种,但是都会按照需要继承InputStream,OutputStream,Reader,Writer的一种,同时为了更好的扩展这些类,采用了装饰者模式。

1、首先举一个简单的例子

比如上面这个文件输入流,会读取文件中的字节,然后打印出来,如果我们要增强这个类,比如要使用缓冲区怎么办,我们可以使用BufferedInputStream

我们查看一下BufferedInputStream的构造函数

发现这个函数实例化的时候需要传一个InputStream,然后在我们的例子中fileInputStream是继承了InputStream的类,所以我们可以交给BufferedInputStream使用,同时BufferedInputStream也会继承

InputStream的抽象类,那么就一定会实现抽象类的所有方法,进而实现了类的增强,其他的类同理

六、使用规律总结

(1)明确要操作的数据是数据源还是数据目的(要读还是要写)?

源:InputStream  Reader

目的:OutputStream  Writer

(2)明确要操作的设备上的数据是字节还是文本?

字节:InputStream

文本:Reader

字节:OutputStream

文本:Writer

(3)明确数据所在的具体设备?

硬盘:文件 File开头

内存:数组,字符串

键盘:System.in

网络:Socket

(4)明确是否需要额外功能?

需要转换—转换流 InputStreamReader OutputStreamWriter

需要高效—缓冲流 Bufferedxxx

多个源—序列流 SequenceInputStream

对象序列化—ObjectInputStream,ObjectOutputStream

保证数据的输出形式—打印流PrintStream Printwriter

操作基本数据,保证字节原样性—DataOutputStream,DataInputStream

java的输入输出流类型_理解JAVA输入输出流相关推荐

  1. java中字符流 字节流_理解Java中字符流与字节流的区别

    1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个"流动的方向",通常可 ...

  2. java byte 无符号类型_获取java byte的无符号数值

    byte a = (byte)234; System.out.println(a); 上面的代码,结果是-22,因为java中byte是有符号的,byte范围是-128~127. 如果想输出234,该 ...

  3. 为啥JAVA虚拟机不开发系统_理解Java虚拟机体系结构

    1 概述 众所周知,Java支持平台无关性.安全性和网络移动性.而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一的编程接口,而不管下层操作系统是什么.正是得益于Jav ...

  4. java的弱引用_理解Java中的弱引用(Weak Reference)

    本篇文章尝试从What.Why.How这三个角度来探索Java中的弱引用,理解Java中弱引用的定义.基本使用场景和使用方法.由于个人水平有限,叙述中难免存在不准确或是不清晰的地方,希望大家可以指出, ...

  5. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

  6. java是什么软件?如何理解Java?

    大家在学习Java的时候,听到大家说Java是什么软件?今天老夫就告诉大家,java它其实不是软件,这里给各位初学者们详细解释一下.接下来详细的介绍下. java是什么软件?如何理解Java? 通俗的 ...

  7. java输入一个字符串_在java中如何用键盘输入一个数,字符,字符串

    一,利用 Scanner 实现从键盘读入integer或float 型数据 1 import java.util.*;2 public classtest {3 public static voidm ...

  8. java设计模式 建造模式_理解java设计模式之建造者模式

    理解java设计模式之建造者模式 发布于 2020-12-10| 复制链接 摘记: 建造者模式(Builder Pattern)主要用于"分步骤构建一个复杂的对象",在这其中&qu ...

  9. java 对象压缩_理解Java对象:要从内存布局及底层机制说起,话说....

    前言 大家好,又见面了,今天是JVM专题的第二篇文章,在上一篇文章中我们说了Java的类和对象在JVM中的存储方式,并使用HSDB进行佐证,没有看过上一篇文章的小伙伴可以点这里:< 这篇文章主要 ...

  10. java包装类和基本类型_你知道Java中基本类型和包装类的区别吗

    前情提要 上一篇中,通过一道常见的面试题(即:String.StringBuilder.StringBuffer的区别),引申到Java中基本类型和包装类的相关内容.在这一篇中,我们将解决上一篇中引申 ...

最新文章

  1. 一文探讨堆外内存的监控与回收
  2. 卸载阿里云服务器的mysql_阿里云服务器入门教程
  3. 多表连接的三种方式详解 HASH JOIN MERGE JOIN NESTED LOOP
  4. c语言指数怎么表示_Assembly 浮点表示法
  5. 不用+、-、×、÷数字运算符做加法
  6. 深入浅出PHP amp; MySQL,深入浅出 PHP MySQL
  7. 机器学习实战pdf原文内容分享
  8. 在低版本浏览器内核中适配replaceAll
  9. 虚拟机linux删除文件后未释放空间,【Linux命令】删除大文件后磁盘空间未释放问题...
  10. STM32F103RCT+TJA1050+USBCAN盒做can通讯
  11. php处理表单上传文件
  12. 《数学建模》知识点总结
  13. 如何撰写品牌故事?品牌故事软文撰写技巧分享
  14. 不背字根学五笔视频教程
  15. parameter server学习
  16. wi8ndows无法加载,Win8.1系统更新Flash插件后无法自动加载插件怎么办
  17. MATLAB与高等数学--方程组相平面图(弹簧的阻尼振动图像)
  18. 人人都懂的RocketMQ基本原理
  19. QQ2009英文版的汉化包
  20. 超级详细的阐述:大数据、云计算和人工智能的关系

热门文章

  1. 优麒麟系统安装MySQL_优麒麟系统安装教程-电脑系统安装手册
  2. Camel可视化操作(结合Gooflow)
  3. 点菜系统软件源码(点菜软件源码分享)
  4. “kuangbin带你飞”专题计划——专题十二:基础DP1
  5. 3.4实训任务 Hadoop环境搭建与安装
  6. 服务器ghost备份后无法进入系统还原,ghost恢复后,系统不能启动的问题
  7. 恩智浦电磁组智能汽车竞赛视频
  8. Deep Glow mac(AE高级辉光特效插件)支持AE2022
  9. c语言如何做一个打卡的程序,C语言实现学生打卡系统
  10. 招商银行/招银网络科技面经、答案