JAVA小知识29:IO流(上)

IO流是指在计算机中进行输入和输出操作的一种方式,用于读取和写入数据。IO流主要用于处理数据传输,可以将数据从一个地方传送到另一个地方,例如从内存到硬盘,从网络到内存等。IO流在编程中非常常见,特别是在文件操作和网络通信中。

一、IO流小知识

1.1、 IO流的分类

IO流主要分为以下几类:

  1. 按数据流方向分类

    • 输入流(Input Stream):从外部设备读取数据到内存,例如从文件读取数据。
    • 输出流(Output Stream):将数据从内存写入到外部设备,例如将数据写入文件。
    • 在这里插入图片描述
  2. 按数据类型分类

    • 字节流(Byte Stream):以字节为单位传输数据,常用于处理二进制数据。例如图片、视频等。常见的字节流类有:

      • 输入字节流:InputStream及其子类(如FileInputStreamBufferedInputStream等)
      • 输出字节流:OutputStream及其子类(如FileOutputStreamBufferedOutputStream等)
    • 字符流(Character Stream):以字符为单位传输数据,常用于处理文本数据。例如文本文件。常见的字符流类有:

      • 输入字符流:Reader及其子类(如FileReaderBufferedReader等)
      • 输出字符流:Writer及其子类(如FileWriterBufferedWriter等)
        在这里插入图片描述

1.2、常见的IO流类

  • FileInputStreamFileOutputStream:用于读取和写入文件的字节流。
  • FileReaderFileWriter:用于读取和写入文件的字符流。
  • BufferedInputStreamBufferedOutputStream:带有缓冲区的字节流,可以提高读写效率。
  • BufferedReaderBufferedWriter:带有缓冲区的字符流,可以提高读写效率。
  • InputStreamReaderOutputStreamWriter:将字节流转换为字符流,通常用于处理编码问题。
    在这里插入图片描述

二、字节流

在这里插入图片描述

2.1、字节输出流:FileOutputStream

操作本地文件的字节输出流,可以把程序中的数据写到本地文件中。他的操作方法分为三步:

  1. 创建字节流输出对象
  2. 写入数据
  3. 释放资源

字节输出流的细节:

  1. 创建字节输出流对象
    • 参数是字符串表示的路径或者是File对象都是可以的
    • 如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的。
    • 如果文件已经存在,则会清空文件
  2. 写数据
    • write方法的参数是整数,但是实际上写到本地文件中的是整数在ASCII上对应的字符
  3. 释放资源
    • 每次使用完流之后都要释放资源

其成员方法如下:

方法名称说明
public void write(int b)写入单个字节
public void write(byte[] b)写入字节数组
public void write(byte[] b, int off, int len)写入指定字节数组的一部分
public void close()关闭文件输出流
protected void finalize()确保文件输出流被关闭
public FileChannel getChannel()返回与此文件输出流相关的通道
public void flush()刷新此文件输出流的缓冲

演示代码如下:

public static void main(String[] args) throws IOException {// 创建对象就相当于创建一个通路 只有通路才能输入输出数据FileOutputStream fos = new FileOutputStream("C:\\Users\\password123456\\Desktop\\资料\\IO流\\a.txt");fos.write(97);fos.close();
}

在这里插入图片描述

public static void main(String[] args) throws IOException {byte[] buf = {'a', 'b', 'c', 'd', 'e', 'f'};FileOutputStream fos = new FileOutputStream("C:\\Users\\password123456\\Desktop\\资料\\IO流\\a.txt");fos.write(buf);// 数组名 起始索引 长度fos.write(buf,1,2);fos.close();
}

在这里插入图片描述

2.2、换行与续写

换行符:

  • window:“\r\n”
  • linux::"\n"
  • mac::"\r"
public static void main(String[] args) throws IOException {byte[] buf = {'a', 'b', 'c', 'd', 'e', 'f'};FileOutputStream fos = new FileOutputStream("C:\\Users\\password123456\\Desktop\\资料\\IO流\\a.txt");fos.write(buf);String wrap = "\r\n";fos.write(wrap.getBytes());// 数组名 起始索引 长度fos.write(buf,1,2);fos.close();
}

在这里插入图片描述

我们说了FileOutputStream创建对象,如果文件已经存在,则会清空文件。但是在我们创建FileOutputStream对象的时候,除了地址参数,其实还有一个续写参数:
在这里插入图片描述
只不过他的默认值是false,只要改为true,就进入到了续写模式。
在这里插入图片描述

2.3、字节输入流:FileInputStream

操作本地文件的字节输入流,可以把本地文件中的数据读取到程序中来
步骤:

  1. 创建字节流输入对象
  2. 读入数据
  3. 释放资源
    在这里插入图片描述

其成员方法如下:

方法名称说明
public int read()从输入流读取一个字节
public int read(byte[] b)从输入流读取一定数量的字节,并将其存储到缓冲区数组 b
public int read(byte[] b, int off, int len)从输入流中读取最多 len 个字节的数据,并将其存储到缓冲区数组 b 中,从偏移量 off 开始存储
public long skip(long n)跳过和丢弃输入流中最多 n 个字节的数据
public int available()返回可以从此输入流中读取的字节数
public void close()关闭此文件输入流并释放与该流关联的所有系统资源
protected void finalize()确保在垃圾回收时关闭文件输入流
public FileChannel getChannel()返回与此文件输入流相关的通道
public FileDescriptor getFD()返回文件描述符,表示与此文件输入流相关的连接

根据上面的读取细节,我们可以写一个循环读取:

public static void main(String[] args) throws IOException {FileInputStream ios = new FileInputStream("C:\\Users\\password123456\\Desktop\\资料\\IO流\\a.txt");int a;while ((a=ios.read())!=-1){System.out.println((char)a);}ios.close();
}

在这里插入图片描述
我们再来看一种错误的写法:

public static void main(String[] args) throws IOException {FileInputStream ios = new FileInputStream("C:\\Users\\password123456\\Desktop\\资料\\IO流\\a.txt");int a;while (ios.read()!=-1){a = ios.read();System.out.println((char)a);}ios.close();
}

在这里插入图片描述

这样的写法自然是错的,还记得我们之前学过的迭代器吗?每一个next都会移动指针,这里也是一样的,每一个read也会移动指针,第一次移动是判断,第二次移动是赋值,所以一次循环会移动两次指针。

三、文件拷贝

第一种方法:

public static void main(String[] args) throws IOException {FileInputStream ios = new FileInputStream("C:\\Users\\password123456\\Desktop\\资料\\IO流\\a.txt");FileOutputStream fos = new FileOutputStream("C:\\Users\\password123456\\Desktop\\资料\\IO流\\b.txt");int a;while ((a=ios.read())!=-1){fos.write(a);}ios.close();fos.close();
}

在这里插入图片描述
这种方法效率非常的慢,来看第二种方法:这种方法非常的好。

public static void main(String[] args) throws IOException {FileInputStream ios = new FileInputStream("C:\\Users\\password123456\\Desktop\\资料\\IO流\\a.txt");FileOutputStream fos = new FileOutputStream("C:\\Users\\password123456\\Desktop\\资料\\IO流\\b.txt");int len;byte[] buffer = new byte[1024 * 1024 * 5];while ((len = ios.read(buffer))!=-1){fos.write(buffer,0,len);}fos.close();ios.close();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/35575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第4章 客户端-Java客户端Jedis

1.获取Jedis maven配置加入项目中 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.8.2</version> </dependency>2.Jedis的基本使用 Jedis的使用方法非常简单&#xff0c;只要下面三…

首次30米空间分辨率生成中国年度耕地栅格数据1986-2021

中国1986-2021年30米分辨率年度耕地数据集 数据介绍 精确、详细且及时的耕地范围信息对于粮食安全保障和环境可持续性至关重要。然而&#xff0c;由于农业景观的复杂性和足够训练样本的缺乏&#xff0c;在大范围下进行高时空分辨率的耕地动态监测仍然具有挑战性&#xff0c;尤其…

洞察用户需求,Xinstall数据统计App让你的App运营如虎添翼

在互联网时代&#xff0c;App推广和运营面临着前所未有的挑战。流量红利逐渐衰退&#xff0c;用户获取成本不断攀升&#xff0c;如何确保在多变的互联网环境下&#xff0c;迅速搭建起能时刻满足用户需求的运营体系&#xff0c;成为众多企业急待解决的问题。今天&#xff0c;我们…

docker部署FastDFS整合Springboot

文章目录 1、FastDFS是什么&#xff1f;2、搭建docker环境3、部署fastdfs4、整合springboot5、接口测试参考文章 1、FastDFS是什么&#xff1f; FastDFS是一个开源的轻量级分布式文件系统&#xff0c;它对文件进行管理&#xff0c;功能包括&#xff1a;文件存储、文件同步、文…

聚星文社官网

推文工具可以帮助你将小说内容简洁明了地转化为推文形式&#xff0c;以便更好地在社交媒体上进行宣传和推广。以下是一些建议的小说推文工具&#xff1a; 聚星文社 字数统计工具&#xff1a;使用字数统计工具&#xff0c;如Microsoft Word或在线字数统计器&#xff0c;来确保你…

[JS]对象

介绍 对象是一种无序的数据集合, 可以详细的描述某个事物 事物的特征在对象中用属性来表示, 事物的行为在对象中用方法来表示 使用 创建对象 let 对象名 {属性名&#xff1a;值&#xff0c;方法名&#xff1a;函数&#xff0c; } let 对象名 new Object(); 对象名.属性…

工业网关的功能与作用解析-天拓四方

在工业4.0和智能制造的时代背景下&#xff0c;工业网关作为连接现场设备与云端平台的桥梁&#xff0c;正发挥着日益重要的作用。它不仅为工业设备的远程监控和管理提供了可能&#xff0c;还为企业实现数字化转型和智能化升级提供了有力支持。本文将对工业网关的功能与作用进行解…

Python:基于TSFEL库对时间序列进行特征分析

1. TSFEL 时间序列作为主要TSFEL提取方法的输入传递&#xff0c;要么作为先前加载在内存中的数组传递&#xff0c;要么存储在数据集中的文件中。 由于TSFEL可以处理多维时间序列&#xff0c;因此随后应用了一套预处理方法&#xff0c;以确保信号质量足够和时间序列同步&#xf…

AI音乐大模型:深度剖析创意与产业的双重变革

随着AI技术的飞速发展&#xff0c;音乐大模型在最近一个月内纷纷上线&#xff0c;这一变革性技术不仅颠覆了传统的音乐创作方式&#xff0c;更是对整个音乐产业及创意产业带来了深远的影响。本文将从多个维度出发&#xff0c;深度剖析AI音乐大模型对创意与产业的双重变革。 一、…

ONLYOFFICE 8.1:引领桌面办公新潮流,功能升级全面提升

目录 一、ONLYOFFICE是什么&#xff1f; 二、功能完善的PDF编辑器 三、幻灯片版式升级 四、改进从右至左显示 五、新的本地化选项 六、多媒体功能增强 七、应用价值探讨 一、ONLYOFFICE是什么&#xff1f; ONLYOFFICE 是一款功能强大的办公套件&#xff0c;旨在提供全面…

acme.sh泛证书申请

说明: 1、想每个项目都接入域名+端口访问,所以通过acme.sh申请泛域名证书 2、阿里云域名解析,并且指定公网ip地址对应的公共Nginx服务 3、acme.sh证书只有3个月,所以要用shell自动续签证书 4、阿里云域名已解析,所以二级域名、三级域名能正常解析,如下图所示, 一、阿里云…

charles破解

一、Charles官网下载安装包二、安装charles三、charles破解 一、Charles官网下载安装包 根据自己电脑系统 官网下载即可。 链接: https://www.charlesproxy.com/download/latest-release/ 二、安装charles 点击下载的安装包&#xff0c;然后进行安装。 三、charles破解 打…

服务器如何实现SSH免密码登录?

目录 一、服务器和电脑的区别二、什么是SSH三、什么是免密码登录四、服务器如何实现SSH免密码登录 一、服务器和电脑的区别 服务器和电脑是两种不同类型的计算机系统&#xff0c;它们在设计、功能和用途上存在明显的区别。首先&#xff0c;从硬件配置上看&#xff0c;服务器通…

MySQL学习(3):SQL语句之DDL

1.SQL通用语法与分类 &#xff08;1&#xff09;通用语法 &#xff08;2&#xff09;分类 2.DDL 2.1数据库操作 show DATABASES; #查询所有数据库select DATABASE(); #查询当前数据库create DATABASE 数据库名称 [default charest 字符集] [collate 排列规则]; #default cha…

时序分析(二):input delay分析

一、IO接口分析基本模型 数据按照同步方式可分为系统同步和源同步方式两种。所谓系统同步指发送端和接收端共用一个时钟源&#xff1b;源同步指发送端提供数据同步时钟&#xff0c;接收端根据该时钟进行数据接收。现在多数通信中使用源同步方式&#xff0c;例如以太网、ADC等。…

洗地机怎么选择最好?四大洗地机精选放心入手

在当今生活节奏飞快的社会中&#xff0c;人们越来越渴望拥有一款高性能、实用方便的家用洗地机&#xff0c;能够帮助我们节省大量的清洁时间。因为洗地机它是吸尘器的升级版&#xff0c;清洁力比扫地机器人更强&#xff0c;洗地机通过高速旋转的风机&#xff0c;产生超大吸力&a…

Unity之HTC VIVE Cosmos环境安装(适合新手小白)(一)

提示&#xff1a;能力有限&#xff0c;错误之处&#xff0c;还望指出&#xff0c;不胜感激&#xff01; 文章目录 前言一、unity版本电脑配置相关关于unity版本下载建议&#xff1a;0.先下载unity Hub1.不要用过于旧的版本2.不要下载最新版本或者其他非长期支持版本 二、官网下…

生命在于学习——Python人工智能原理(4.4)

三、Python的数据类型 3.2 Python的组合数据类型 特点&#xff1a;表示多个元素的组合&#xff0c;可以包含不同类型的元素&#xff0c;甚至是其他的组合数据类型。 在内存中通常需要额外的空间来存储元素间的关系。 组合数据类型能够将多个同类型或不同类型的数据组织起来&a…

出版发行企业从传统分销到网格化营销的变革之路(AMT企源)

引言&#xff1a; 本文为该系列文章的第一篇&#xff0c;旨在介绍当前出版发行行业&#xff0c;尤其是各省级新华书店集团围绕“综合教育服务”和“大文化消费服务”两个领域的业务布局下&#xff0c;如何实现营销模式创新、营销组织创新&#xff0c;以推动新华书店集团从传统…

浮动IP绑定主机步骤

文章目录 1&#xff0c;查看本机的原有IP2&#xff0c;绑定浮动IP3&#xff0c;验证绑定情况4&#xff0c;解绑浮动IP 1&#xff0c;查看本机的原有IP ifconfig得到本机的ip是192.168.10.128 2&#xff0c;绑定浮动IP ifconfig ens33:1 192.168.10.10 netmask 255.255.255.0…