IO流相关

news2024/12/24 3:21:42

1. IO概述

Java中I/O操作主要是指使用java.io包下的内容,进行输入、输出操作。输入也叫做读取数据,输出也叫做作写出数据。

1.1 IO的分类

根据数据的流向分为:输入流输出流

  • 输入流 :把数据从其他设备上读取到内存中的流。

  • 输出流 :把数据从内存 中写出到其他设备上的流。

格局数据的类型分为:字节流字符流

  • 字节流 :以字节为单位,读写数据的流。

  • 字符流 :以字符为单位,读写数据的流。

windows自带的记事本能打开的就是纯文本文件

1.2 IO的流向说明图解

1.3 顶级父类们

输入流输出流
字节流字节输入流 InputStream字节输出流 OutputStream
字符流字符输入流 Reader字符输出流 Writer

这四个类都是抽象类

字节流:

FileOutputStream:

字节流输出细节:

FileOutputStream写数据的3种方式:

法1:

法2:

法3:法三中三个参数的意思分别是:数组、起始索引、个数(从数组a中的i索引开始写,写len个长度)

写数据的细节:

1、换行写出:\r\n

2、续写:同一文件的续写就是在FileOutputStream的构造时,第二个参数写true

FileInputStream:

read():每次读取一个字节的数据并移动一个指针,读取不到返回-1

FileInputStream书写细节:

FileInputStream循环读取:

FileInputStream读取数据的2种方法:read空参和实参

空参返回数据,实参返回读了多少个数据

法2中:

比如字节数组长度是几就一次性读几位,但一般选取1024 的整数倍

具体详解:读取过程中,会尽可能将数组读满,并填补在数组中

每次读2个,读取最后一次时,只剩下一位可读,原来数组只有第一位被替换,索引第二位d始终保持不变

如何改造?

文件拷贝实例:

法一:速度很慢的写法(read())

法二:速度很快的写法(read(byte[ ]))

try catch异常处理:添加Finally

以JDK9以后举例:

关于汉字存储:

UTF-8编码:

为什么出现乱码?

为什么拷贝中文不会乱码?

读取拷贝数据时,用的数据集和编码格式与数据源保持一致,所以不会乱码

编码与解码的实现:

字符流:遇到中文自动读多个字节

FileReader:

与字节流不同,这里的read空参会根据中英文不同,自动转换读取的字节数

空参和有参的细节区别:

空参时,返回的是解码返回的10进制的整数

有参时,返回的相当于:空参+强转char类型,将强转后的数据放到了数组中

FileWriter:

FileWriter书写细节:

字符输入流原理解析:存在缓冲区(字节流没有)

简单来说,在数据源和内存间传送数据时,内存区中存在缓冲区,这个缓冲区中存在一个8192的字节数组,他会在传输时将文件中的数据读取进来使得尽可能充满缓冲区,存在缓冲区中,如果缓冲区中没有数据了,就会继续去文件中读取,如果文中没有了就会返回-1

字符输出流原理解析:存在缓冲区,数据先存在缓冲区

两种方法将数据送往目的地:

1、缓冲区满了自动送往

2、使用flush刷新

3、close

字符流与字节流的使用场景

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

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

相关文章

力扣SQL50 好友申请 II :谁有最多的好友 UNION ALL

Problem: 602. 好友申请 II :谁有最多的好友 👨‍🏫 参考题解 功能概述: 该查询统计 RequestAccepted 表中用户(作为请求方或接受方)出现的总次数,并找出出现次数最多的用户ID。 执行步骤&a…

PHP语言的学习(ctfshow中web入门web93~web104)

PHP语言基础知识(超详细)_php开发知识-CSDN博客 PHP特性之CTF中常见的PHP绕过-CSDN博客 浅谈PHP代码执行中出现过滤限制的绕过执行方法_php过滤绕过-CSDN博客 php代码审计(适合小白入门)_php审计入门-CSDN博客 什么是PHP? PHP 是一种脚本…

File 类练习

练习1:在当前模块下的aaa文件夹中创建一个a.txt文件。 分析:当前模块下是没有aaa文件夹的,这里我是手动在当前模块下创建了aaa文件夹,然后在指定a.txt的路径,再createNewFile()的。 public class File1 {public stat…

一键重装系统哪个软件好用_2024年一键重装系统工具排行榜

一键重装系统哪个软件好?现在市面上重装软件五花八门,有些网友不知道哪些好用,下面小编就为大家整理几款不错的电脑一键重新系统软件供大家选择,现整理2024年一键重装系统软件排行。 一键重装系统哪个软件好用? 一键重…

如何系统地自学Python?AI的回答让你少走三年弯路!

系统地自学Python是一个循序渐进的过程&#xff0c;需要掌握基础知识、进阶技能以及实践项目。以下是一个详细的自学Python的指南&#xff1a; 一、学习准备<末尾有AI整理的学习资料、电子书籍、实战项目> 了解Python&#xff1a; Python是一种流行的编程语言&#xff…

入门 PyQt6 看过来(案例)22~ 图表案例

​ ​ def showPie(self):"""绘制饼状图"""# &#xff08;1&#xff09;创建图表和视图chart QChart()chart.setTitle(中国高等教育普及率)chart.legend().setAlignment(Qt.AlignmentFlag.AlignLeft)chartView QChartView(self) # 必须有sel…

CookieMaker工作室合作开发C++项目十一:拟态病毒

&#xff08;注&#xff1a;本文章使用了“无标题技术”&#xff09; 一天&#xff0c;我和几个同事&#xff0c;平台出了点BUG&#xff0c;居然给我刷出了千年杀&#xff0c;同事看得瑕疵欲裂&#xff0c;发誓要将我挫骨扬灰—— &#xff08;游戏入口&#xff1a;和平精英31.…

iOS技术之安装nvmnode完整步骤

1.前提 首先电脑里得有brew、git、vscode这些工具, 当然了要用nvm&node肯定是需要这些基本开发工具 2.删除node环境 如果mac里没有安装过node、npm可以无视直接去 3 安装nvm。 为了保证安装nvm能够成功管理node&#xff0c;必须把电脑里之前安装的node全部清理&#xf…

微信小程序css中配置了文字超出一行或两行则显示省略号对纯数字或纯字母或小数点无效的解决办法

配置了文字超出一行或两行则显示省略号对纯数字或纯字母或小数点无效的解决办法 overflow_title{display: -webkit-box;-webkit-line-clamp: 1;-webkit-box-orient: vertical;overflow: hidden;text-overflow: ellipsis; }只需要加上这两行css代码即可 word-break:break-all;…

Spring泛型的依赖注入

泛型依赖注入就是允许我们在使用spring进行依赖注入的同时&#xff0c;利用泛型的优点对代码进行精简&#xff0c;将可重复使用的代码全部放到一个类之中&#xff0c;方便以后的维护和修改。同时在不增加代码的情况下增加代码的复用性。

Go切片深入学习

Go切片专项学习 go切片扩容机制 go1.18 之前&#xff1a; 1.如果期望容量大于当前容量的两倍就会使用期望容量&#xff1b; 2.如果当前切片的长度小于 1024 就会将容量翻倍&#xff1b; 3.如果当前切片的长度大于 1024 就会每次增加 25% 的容量&#xff0c;直到新容量大于期…

基于AI大模型的数据治理

— 01— 什么是大模型&#xff1f; 大模型是指具有数千万甚至数亿参数的深度学习模型。近年来&#xff0c;随着计算机技术和大数据的快速发展&#xff0c;深度学习在各个领域取得了显著的成果&#xff0c;如自然语言处理&#xff0c;图片生成&#xff0c;工业数字化等。为了提…

如何快速下载huggingface大模型

Stackoverflow 上有个AI开发入门的最常见问题 How to download model from huggingface?&#xff0c;回答五花八门&#xff0c;可见下载 huggingface 模型的方法是十分多样的。 其实网络快、稳的话&#xff0c;随便哪种方法都挺好&#xff0c;然而结合国内的网络环境&#xf…

如何给微信小程序商城增加直播购物功能

作者&#xff1a;阿龙 当前&#xff0c;随着抖音、快手、淘宝、拼多多等平台直播卖货的崛起&#xff0c;消费者已经习惯了在直播间购物模式&#xff0c;它可以实现卖家和用户之间的互动&#xff0c;实时解答用户的疑问&#xff0c;让用户可以放心下单购买。东方甄选、董宇辉、李…

LeetCode每日一题_3143.正方形中的最多点数

解题思路&#xff1a;自己&#xff1a;先把points里的点拿来求出坐标系的离原点最远的点&#xff0c;然后根据最远距离新建一个数组&#xff0c;然后把points的点都在新建的数组上标记出来。然后再便利从边长为0的正方形开始&#xff0c;里面是否有重复的标签。但是代码写不出来…

1.MongoDB入门指南之开篇

1. 写在前面 MongoDB大家可能听说过&#xff0c;但是要怎么学习&#xff1f;先学习哪个&#xff0c;很多人是不知道的&#xff0c;毕竟面对一个未知的事物&#xff0c;迷茫是很多人都会遇到的&#xff0c;从今天起我们就开始系统的介绍MongoDB的学习。 2. 课程介绍 课程主要分…

代理模式和Spring MVC

Spring是一个分层的轻量级的开源Java框架。核心是IOC(Inverse of Control 控制反转)和AOP(Aspect Oriented Programming 面向切面编程) AOP 面向切面 AOP &#xff08;Aspect Orient Programming&#xff09;,直译过来就是 面向切面编程&#xff0c;AOP 是一种编程思想&#x…

Antd - Table 父子表格Checkbox联动

Antd - Table 父子表格Checkbox联动 前言一. 勾选父子组件联动二. 效果 前言 由于Antd中的父子组件之间&#xff0c;如果有多选功能&#xff0c;那么不会有联动的关系&#xff0c;需要自己实现。 一. 勾选父子组件联动 代码如下&#xff1a; import React, { useState } fr…

微搭如何设置隐私协议

目录 1 创建数据源2 创建应用3 校验隐私协议是否同意4 实际的效果 小程序里如果涉及收集用户隐私信息的&#xff0c;需要提供隐私协议&#xff0c;微搭中如何实现呢&#xff1f; 1 创建数据源 我们创建两个数据源&#xff0c;一个是个人信息采集表&#xff0c;一个是隐私协议表…

2024最全面软件测试2000+面试题附答案详解,卷起来

进大厂是大部分程序员的梦想&#xff0c;而进大厂的门槛也是比较高的&#xff0c;所以这里整理了一份阿里、美团、滴滴、头条等大厂面试大全&#xff0c;其中概括的知识点有&#xff1a;软件测试基础&#xff0c;MySQL&#xff0c;liunx&#xff0c;接口测试&#xff0c;APP测试…