一、IO流的介绍

  • IO流:指的用来承载数据进出内存的流,【负责把数据从一个地方运输到另一个地方的方式】

  • 作用:运输数据

  • 分类:

  • 流向:     输入流 和输出流

  • 性能划分【处理数据的单位】:     字节流 和字符流

  • io流类的使用流程:

  • 1、导包【IO流的类基本上都jdk提供的类】

  • 2、创建IO流对象并去处理携带来的异常

  • 3、使用IO流对象调用相关的功能对数据进行操作

  • 4、关闭流对象

二、字节流

  - 在使用IO流对数据进行传输的时候以字节为单位操作数据的流就叫做字节流
  • 分类:字节输入流和字节输出流

1、字节输入流【InputStream

介绍:他是字节输入流的顶层父类,是一个抽象类,定义所有字节输入流的共性功能和属性
  • 常用功能:

  • 1、int read():一次读取一个字节数据到内存

  • 2、int read(byte[] bytes):使用字节数组去读取多个字节的内容到内存

  • 3、int available():返回未读取的字节的个数

  • 4、close():关闭流

  • 注意:InputStream类是一个抽象类,不能创建对象,只能是它的子类去使用它的功能,根据设备的不同,对应的子类也不同

  • 最常用的子类文本字节输入流【FileInputStream

FileInputStream

  • 介绍:是InputStream的子类,负责完成内存和磁盘文本文件之间数据的输入交互的操作。输入功能都是InputStream的功能。

  • 构造方法:

  • FileInputStream(File file):创建一个可以读取指定File对象对应的文件的字节输入流对象 FileInputStream(String path):创建一个可以读取指定路径对应的文件的字节输入流对象

  • 注意事项:

  • 1、同一个字节输入流对象每读取一个字节,光标向后移动一位,每次以光标位置去读取 ;

  • 2、所有的字节数读取完毕继续读取的时候得到的是 -1.

代码示例:

public static void main(String[] args) {FileInputStream inputStream = null;try {inputStream = new FileInputStream("Item/mm/miao/tt.txt");int read = inputStream.read();System.out.println(read);//这样读取的是字节数System.out.println((char)read);//须转为字符//判断文件中未读取字节的个数int available = inputStream.available();System.out.println(available);//用字节数组去读取文件内容,数组指定大小即可byte[] bytes = new byte[1024];int read1 = inputStream.read(bytes);System.out.println(new String(bytes, 0, read1));} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{if(inputStream != null) {//读取完毕,关流try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}}}

2.字节输出流【OutputStream】

介绍:是字节输出流的顶层父类,是一个抽象类,定义了所有的字节输出流的共性功能,

常见的子类:文本字节输出流【FileOutputStream

常用功能:

void write(int b):输出字节内容到指定的目标文件中

void write(byte[] arr):输出字节数组中所有的字节内容到目标文件中

void write(byte[] arr, int offset, int len):输出字节数组中指定范围的字节内容到目标文件中                  offset:输出的字节内容的开始索引值

len:输出的字节个数

void close():关闭流

FileOutputStream

  • 概述:文本字节输出流,是OutputStream的子类,负责内存和磁盘文件之间的数据的输出交互的流,功能都是OutputStream的功能

  • 构造方法:

  • FileOutputStream(File file):创建以指定File对象对应的文件为目标文件的字节输出流对象

  • FileOutputStream(String path):创建以指定path路径对应的文件为目标文件的字节输出流对象

  • 注意事项:字节输出流对象创建的时候指定的目标文件不存在,则会自动的给创建文件【前提:文件所在的目录在磁盘真实存在的】 字节输出流对象创建的时候指定的目标文件存在,则会对已经存在的文件进行格式化

代码示例:

public class IoStreamText {public static void main(String[] args) {FileOutputStream fos = null;try {fos = new FileOutputStream("Item/mm/miao/tt.txt");fos.write("afafjsafas".getBytes());} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {if(fos != null) {try {fos.close();} catch (IOException e) {e.printStackTrace();}}}}
}

追加续写

输出数据到目标文件时,想要保留文件原有的数据,并在该数据的后面输出数据需要使用到另一个输出流的构造方法【续写功能】

FileOutputStream(String path,boolean b):

FileOutputStream(File file,boolean b): 参数b必须是true,才是追加续写的对象。

FileOutputStream fos = new FileOutputStream("Item/mm/miao/tt.txt", true);

文件拷贝

  • 分析:使用字节输入流把源文件的数据读取到内存中,然后通过字节输出流把读取到的数据原封不动的写出到目标文件 文件中的字节数可能一次读取不完。需要读取多次一直到读取完毕。

  • 注意:每次读取完必须及时的写出去。 一边读一边写需要在循环中完成: 读取的返回值为-1,则读写完毕!

  • 代码示例

    package com.tlc.io.file;import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;public class IoStreamText {public static void main(String[] args) {//创建一个字节输入流对象---我们一图片拷贝为例FileInputStream fis = null;//创建一个字节输出流对象FileOutputStream fos = null;try {fis = new FileInputStream("Item/mm/miao/1.jpeg");fos = new FileOutputStream("Item/mm/tt.jpeg");//创建一个字节数组存储拷贝的数据byte[] bytes = new byte[1024];//读取文件数据int len;//使用whlie循环完成拷贝while((len = fis.read(bytes)) != -1) {//边读边写,每次写入数组读取的字节fos.write(bytes, 0, len);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {if(fos != null) {try {//后开的输出流先关闭fos.close();} catch (IOException e) {e.printStackTrace();}}if(fis != null) {try {//关闭输入流fis.close();} catch (IOException e) {e.printStackTrace();}}}}
    }
    

    3.字节缓冲流【字节高效率】

    • 概述:用来对字节流进行提升效率的一个流,本身没有读写的功能,字节缓冲流要想使用前提是必须要有字节流

    • 作用:对字节流进行修饰提效的。

    • 分类:

    • 字节输出缓冲流【BufferedOutputStream】

    • 字节输入缓冲流【BufferedInputStream】

    • 构造方法:

    • BufferedInputStream (InputStream is):创建一个以is为提升目标的字节输入缓冲流对象

    • BufferedOutputStream(OutputStream os):创建一个以os为提升目标的字节输出缓冲流

    • 字节输出缓冲流的特有方法:flush():刷新缓冲区。

    • flush方法和close方法的区别:

    • 1、flush方法只是用来刷新字节输出缓冲流的缓冲区内容的方法,调用之后流对象还可以继续使用;

    • 2、close方法用来关闭流对象,默认先调用flush方法刷新缓冲区后,流对象关闭就不能再继续使用了。

    • 代码示例:

    字节缓冲流高效原理

    • 字节输入缓冲流:

    • 使用字节输入缓冲流读取目标文件中数据的时候,缓冲流对象一次性从目标文件中读取【8192】个字节内容回来之后再在内存中创建一个8192个长的字节缓冲区来存放这些字节,接下来缓冲流在读取内容的时候其实是使用内部字节输入流按照read方法从缓冲区中读取字节进入到内存的目标处。这样减少了读取时内存和磁盘文件的交互次数,从而提效。

    • 字节输出缓冲流:

    • 字节输出缓冲流第一次输出内容的时候,没有把内容直接输入到目标文件中去,先在内存中创建一个8192长的字节缓冲区,使用内部字节输出流按照write方法写出字节数到缓冲区,等缓冲区全部写满,自动的把8192个字节内容一次性的写入目标文件中。 缓冲区如果没有写满,可以调用flush方法将缓冲区内容强制写入目标文件中。

IO流——字节流的使用相关推荐

  1. Java17-day08【File(创建和删除文件、判断和获取功能、遍历目录)、IO流(字节流写数据、异常处理、字节流读数据、复制文本文件、复制图片)】

    视频+资料(工程源码.笔记)[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] Java基础--学习笔记(零起点打开java ...

  2. Java基础---认识IO流---字节流、字符流---缓冲流---转换流

    一.认识IO流 I/O就是用于设备之间进行数据交互的对象所属的类型 IO流的体系结构:根据分类,有四种流对象类型 字节流:可以直接操作字节信息的流对象 字节输入流:InputStream 字节输出流: ...

  3. IO流——字节流、字符流

    在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 流的分类 ①   流按其流向分为"输入流 ...

  4. java基础 io流 字节流 字符流 节点流 包装流 转换流 缓冲流 对象流 打印流 Properties类

    目录 1.概念 2.常用的文件操作 2.1 创建文件 2.2 获取文件相关信息 2.3 目录的操作和文件删除 3. IO流原理及流的分类 3.1 流的分类 4.InputStream 字节输入流 4. ...

  5. Java IO流---字节流

    IO流概述: IO:输入输出(input/output) 流:是一种抽象概念,是对数据传输的总称,也就是说数据在设备间的传输称为流,流的本质是数据传输 IO流就是用来处理设备间数据传输问题的 常见应用 ...

  6. Java IO流 - 字节流的使用详细介绍

    文章目录 IO流的基本介绍 字节流的使用 文件字节输入流 创建字节输入流 每次读取一个字节 每次读取一个数组 一次读取全部字节 文件字节输出流 创建字节输出流 写入文件输出流 文件拷贝练习 IO流的基 ...

  7. Stream流、FiLe和IO流、IO流(字节流-拷贝文件_和_字符流-读取文本中的数据写入文本文件中)9-10-11

    package com.streamdemo; import java.util.ArrayList; import java.util.List; /*** 体验Stream流** 创建一个集合,存 ...

  8. Java 常用IO流(字节流和字符流)详解

    一,简介及分类 IO流用来处理设备之间的数据传输:JAVA对数据的操作是通过流的方式:JAVA用于操作流的类都在IO包中 流按流向分为两种:输入流,输出流. 流按操作类型分为两种: 字节流 : 字节流 ...

  9. IO流(字节流和字符流)

    IO流的分类: 按照数据流向 站在内存角度 输入流 读入数据 输出流 写出数据 按照数据类型 字节流 可以读写任何类型的文件 比如音频 视频 文本文件 字符流 只能读写文本文件 1.字节输入流的继承体 ...

最新文章

  1. 这个机器狗引起网友争议,「持枪机器狗」射程达1200米
  2. nginx启动报错:Job for nginx.service failed. See 'systemctl status nginx.service' and 'journalctl -xn' fo
  3. 论云计算对传统软件工程的影响
  4. Java之反射--练习
  5. 通过日志恢复MS SQL数据案例
  6. SQL注入 ——sql数据库操作基础(一)
  7. “not a single-group group function”
  8. NPOI 读取excel到DataTable 读取隐藏列 读取公式列
  9. git 添加用户名和邮箱_Git安装与基础使用
  10. 索引大小对语句执行速度的影响
  11. python学习笔记第三节
  12. 用glew,glfw实现opengl绘制3D学习笔记1-实现一个窗口
  13. 图解python CGI(通用网关接口 )
  14. python处理地震sac数据_[数据处理] 地震数据及相关软件概述
  15. 运放参数的详细解释和分析压摆率SR
  16. 吴伯凡-认知方法论-结果的简单,起点的复杂
  17. 深漂一年,一位程序员的2016年终告白
  18. 一些免费在线杀毒网址
  19. 一个好用的源代码阅读工具——Understand
  20. 计算机教室冷量负荷,7.2空调负荷计算 - 民用建筑供暖通风与空气调节设计规范 GB50736-2012 - 消防规范大全 - 消防资源网!...

热门文章

  1. java长时间_什么导致Java中长时间的旋转和同步时间?
  2. 浅谈动态规划和分治、贪心算法的区别
  3. 栈——验证栈序列(洛谷 P4387)
  4. 网易云深度学习第一课第一周编程作业
  5. r语言数据变量分段_使用R语言实现数据分段
  6. 16位整型数据matlab,matlab的整型数据
  7. 小熊派:用OpenHarmory3.0点亮LED
  8. 技术+案例详解无监督学习Autoencoder
  9. 代码 or 指令,浅析ARM架构下的函数的调用过程
  10. Docker的save和export命令的区别