IO流 详细介绍

news/2024/7/5 4:27:19

一、IO流概述

1.IO:输入(Input读取数据)/输出(Output写数据)

2.流:是一种抽象概念,是对数据传输的总称,也就是说数据在设备间的传输称为流,流的本质是数据传输IO流就是用来处理设备间数据传输问题的。

3.常见的应用:文件上传、下载、复制等。

文件通常是由一连串的字节或字符构成,组成文件的字节序列称为字节流,组成文件的字符序列称为字符流。Java中根据流的方向可以分为输入流和输出流。输入流是将文件或其它输入设备的数据加载到内存的过程;输出流恰恰相反,是将内存中的数据保存到文件或其他输出设备,详见下图:

1648290969(1).png

 二、IO流分类

2.1  根据数据流向分类:  

输入流:读数据  将硬盘中的数据读取到内存中  

输出流:写数据  将程序中的数据写入到硬盘中

1648291002(1).png

2.2  按照数据类型来分:

字节流: 字节输入流/字节输出流  

字符流: 字符输入流/字符输出流

2.3  IO流应用场景:  

纯文本文件,优先使用字符流  

图片、视频、音频等二进制文件,优先使用字节流  

不确定文件类型,优先使用字节流,字节流是万能的流

2.4  InputStream(字节输入流)、OutputStream(字节输出流)、Reader(字符输入流)、Writer(字符输出流)

2.4.1  InputStream(字节输入流)

InputStream是字节输入流,InputStream是一个抽象类,所有继承了InputStream的类都是字节输入流,主要了解以下子类即可:

1648291105(1).png

主要方法介绍: 

void

close()
关闭此输入流并释放与该流关联的所有系统资源。

abstract int

read()
从输入流读取下一个数据字节。(多次调用会按顺序依次读取)返回-1表示读取完毕

int

read(byte[] b)
从输入流中读取一定数量的字节并将其存储在缓冲区数组 b 中。

int

read(byte[] b, int off, int len)
将输入流中最多 len 个数据字节读入字节数组。

2.4.2  OutputStream(字节输出流)

1648291222(1).png

主要方法介绍: 

void

close()
关闭此输出流并释放与此流有关的所有系统资源。

void

flush()
刷新此输出流并强制写出所有缓冲的输出字节。

void

write(byte[] b)
将 b.length 个字节从指定的字节数组写入此输出流。

void

write(byte[] b, int off, int len)
将指定字节数组中从偏移量 off 开始的 len 个字节写入此输出流。

abstract void

write(int b)
将指定的字节写入此输出流。

2.4.3  Reader(字符输入流)

所有继承了Reader都是字符输如流

1648291279(1).png

主要方法介绍:

abstract void

close()
关闭该流。

int

read()
读取单个字符。(多次调用会按顺序依次读取)返回-1表示读取完毕

int

read(char[] cbuf)
将字符读入数组。

abstract int

read(char[] cbuf, int off, int len)
将字符读入数组的某一部分。

 2.4.4  Writer(字符输出流)

所有继承了Writer都是字符输出流

1648291330(1).png

主要方法介绍:

Writer

append(char c)
将指定字符追加到此 writer。

abstract void

close()
关闭此流,但要先刷新它。

abstract void

flush()
刷新此流。

void

write(char[] cbuf)
写入字符数组。

abstract void

write(char[] cbuf, int off, int len)
写入字符数组的某一部分。

void

write(int c)
写入单个字符。

void

write(String str)
写入字符串。

void

write(String str, int off, int len)
写入字符串的某一部分。

 三、文件流

3.1  FileInputStream(文件字节输入流)

FileInputStream:从文件系统中的文件获取输入字节;

FileInputStream(String name):通过打开与实际文件的连接来创建一个FileInputStream,该文件有文件系统中的路径名name命名;

步骤:

1.创建字节输入流对象

2.调用字节输入流对象的读数据方法

3.释放资源

字节流读取数据:

方法名称

说明

int read()

从该输入流读取一个字节数据,返回值为-1时说明文件读取完毕(多次调用会按顺序依次读取)

InputStream in = new FileInputStream("d:/a.txt");

int c = 0;
while((c = in.read()) != -1){
    System.out.println(c);
}

in.close();

上述代码在执行时:如果在执行in.read()时没有读取到末尾,即文件还有可读取的数据,in.read()方法会返回下一个可用字节的整数值(0-255之间)。如果已经读取到了文件末尾,in.read()方法会返回-1。

3.2  FileOutputStream(文件字节输出流)

字节流写入数据常用的三种方式: 

方法名称

说明

void write(int b)

将指定的字节写入此文件输出流 一次写一个字节数据

void write(byte[] b)

将 b.length字节从指定的字节数组写入此文件输出流 一次写一个字节数组数据

void write(byte[] b, int off, int len)

将 len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流 一次写一个字节数组的部分数据

void write(byte[] b, int off, int len)是Java中OutputStream类的一个方法,用于将指定字节数组中的一部分数据写入输出流。

参数解释:

  • b:要写入的字节数组。
  • off:写入的起始偏移量,即从数组的第off个位置开始写入数据。
  • len:要写入的字节数,即写入b数组中从off位置开始的连续len个字节。

如何追加写入数据:

字节流写入数据通过 new FileOutputStream(new File("mayikt.txt"), true); 表示追加写入数据。 如果第二个参数为true,则字节流写入文件的末尾。此方法通过在构造FileOutputStream对象时将第二个参数设置为true来实现追加写入。

InputStream in = new FileInputStream("d:/a.txt");
OutputStream out = new FileOutputStream("d:/aa.txt");

int c = 0;
while((c = in.read()) != -1){
    out.write(c);
}

in.close();
out.close();


http://lihuaxi.xjx100.cn/news/1455654.html

相关文章

100道python练习题(十)

请继续查看以下第91到100题的代码示例: 编写一个程序,计算一个整数列表中所有元素的和。 def calculate_sum(nums):return sum(nums)number_list [1, 2, 3, 4, 5]sum_of_numbers calculate_sum(number_list)print("列表中所有元素的和&#xff…

基于PyTorch的图像识别

前言 图像识别是计算机视觉领域的一个重要方向,具有广泛的应用场景,如医学影像诊断、智能驾驶、安防监控等。在本项目中,我们将使用PyTorch来开发一个基于卷积神经网络的图像识别模型,用来识别图像中的物体。下面是要识别的四种物…

day20 飞机大战射击游戏

有飞行物类 飞行 爆炸 的连环画, 飞行的背景图 , 子弹图, 还有游戏开始 暂停 结束 的画面图。 设计一个飞机大战的小游戏, 玩家用鼠标操作hero飞行机, 射出子弹杀死敌机,小蜜蜂。 敌机可以获得分数&…

刷享全球美好 中信银行信用卡推出跨境消费系列活动

来源 | 镭射财经(leishecaijing) 日前,文旅部办公厅发布通知,恢复全国旅行社及在线旅游企业经营中国公民赴有关国家和地区(第三批)出境团队旅游和“机票酒店”业务,出境跟团游国家和地区由此前…

WX1860- ngbe-1.2.5 xdp程序在路由模式下,使用iperf工具测试数据包不转发,用jmeter可以

本地验证时重定向iperf包有出现calltrace错误&#xff0c;经推断&#xff0c;系统PAGE_SIZE<8k时可能出现&#xff08;getconf PAGE_SIZE指令可查看&#xff09;&#xff0c;按下图将ngbe_main.c的2350行ngbe_rx_bufsz改为ngbe_rx_pg_size可修复。其次&#xff0c;需要将加载…

ai之美:探索写真照片软件的创造力

小青&#xff1a;嘿&#xff0c;小华&#xff0c;你知道最近ai艺术写真非常流行吗&#xff1f; 小华&#xff1a;真的吗&#xff1f;我还不知道呢。告诉我更多细节吧&#xff01; 小青&#xff1a;好的&#xff0c;ai艺术写真是指使用人工智能技术将照片转化为艺术作品的过程…

Toast的Android自定义

在Android中&#xff0c;Toast是一种轻量级的提示工具&#xff0c;用于在屏幕上显示一段短暂的文字或图标消息。虽然Android原生的Toast提供了简单的文本提示功能&#xff0c;但有时开发者可能需要更加定制化的Toast样式来满足特定的需求。 自定义Android Toast&#xff1a; …

日志系统——日志格式化模块设计

一&#xff0c;模块主要成员 该模块的主要作用是对日志消息进行格式化&#xff0c;将日志消息组织成制定格式的字符串。 该模块主要成员有两个&#xff1a;1.格式化字符串。 2.格式化子项数组 1.1 格式化字符串 格式化字符串的主要功能是保存日志输出的格式字符串。其格式化字…