IO流——字节流的使用
一、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流——字节流的使用相关推荐
- Java17-day08【File(创建和删除文件、判断和获取功能、遍历目录)、IO流(字节流写数据、异常处理、字节流读数据、复制文本文件、复制图片)】
视频+资料(工程源码.笔记)[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg 提取码:zjxs] Java基础--学习笔记(零起点打开java ...
- Java基础---认识IO流---字节流、字符流---缓冲流---转换流
一.认识IO流 I/O就是用于设备之间进行数据交互的对象所属的类型 IO流的体系结构:根据分类,有四种流对象类型 字节流:可以直接操作字节信息的流对象 字节输入流:InputStream 字节输出流: ...
- IO流——字节流、字符流
在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 流的分类 ① 流按其流向分为"输入流 ...
- java基础 io流 字节流 字符流 节点流 包装流 转换流 缓冲流 对象流 打印流 Properties类
目录 1.概念 2.常用的文件操作 2.1 创建文件 2.2 获取文件相关信息 2.3 目录的操作和文件删除 3. IO流原理及流的分类 3.1 流的分类 4.InputStream 字节输入流 4. ...
- Java IO流---字节流
IO流概述: IO:输入输出(input/output) 流:是一种抽象概念,是对数据传输的总称,也就是说数据在设备间的传输称为流,流的本质是数据传输 IO流就是用来处理设备间数据传输问题的 常见应用 ...
- Java IO流 - 字节流的使用详细介绍
文章目录 IO流的基本介绍 字节流的使用 文件字节输入流 创建字节输入流 每次读取一个字节 每次读取一个数组 一次读取全部字节 文件字节输出流 创建字节输出流 写入文件输出流 文件拷贝练习 IO流的基 ...
- Stream流、FiLe和IO流、IO流(字节流-拷贝文件_和_字符流-读取文本中的数据写入文本文件中)9-10-11
package com.streamdemo; import java.util.ArrayList; import java.util.List; /*** 体验Stream流** 创建一个集合,存 ...
- Java 常用IO流(字节流和字符流)详解
一,简介及分类 IO流用来处理设备之间的数据传输:JAVA对数据的操作是通过流的方式:JAVA用于操作流的类都在IO包中 流按流向分为两种:输入流,输出流. 流按操作类型分为两种: 字节流 : 字节流 ...
- IO流(字节流和字符流)
IO流的分类: 按照数据流向 站在内存角度 输入流 读入数据 输出流 写出数据 按照数据类型 字节流 可以读写任何类型的文件 比如音频 视频 文本文件 字符流 只能读写文本文件 1.字节输入流的继承体 ...
最新文章
- 这个机器狗引起网友争议,「持枪机器狗」射程达1200米
- nginx启动报错:Job for nginx.service failed. See 'systemctl status nginx.service' and 'journalctl -xn' fo
- 论云计算对传统软件工程的影响
- Java之反射--练习
- 通过日志恢复MS SQL数据案例
- SQL注入 ——sql数据库操作基础(一)
- “not a single-group group function”
- NPOI 读取excel到DataTable 读取隐藏列 读取公式列
- git 添加用户名和邮箱_Git安装与基础使用
- 索引大小对语句执行速度的影响
- python学习笔记第三节
- 用glew,glfw实现opengl绘制3D学习笔记1-实现一个窗口
- 图解python CGI(通用网关接口 )
- python处理地震sac数据_[数据处理] 地震数据及相关软件概述
- 运放参数的详细解释和分析压摆率SR
- 吴伯凡-认知方法论-结果的简单,起点的复杂
- 深漂一年,一位程序员的2016年终告白
- 一些免费在线杀毒网址
- 一个好用的源代码阅读工具——Understand
- 计算机教室冷量负荷,7.2空调负荷计算 - 民用建筑供暖通风与空气调节设计规范 GB50736-2012 - 消防规范大全 - 消防资源网!...