黑马Java——IO流
一、IO流的概述
IO流:存储和读取数据的解决方案
IO流和File是息息相关的
1、IO流的分类
1.1、纯文本文件
word、Excel不是纯文本文件
而txt或者md文件是纯文本文件
2、小结
二、IO流的体系结构
三、字节流
1、FileOutputStream(字节输出流)
代码
结果
2、FileOutputStream写出数据的细节
3、FileOutputStream写数据的3种方式
3.1、一次写一个字节数据
3.2、一次写一个字节数组数据
3.3、一次写一个字节数组的部分数据
4、FileOutputStream写数据的两个小问题
4.1、换行写
4.2、续写
5、小结
6、FileInputStream(字节输入流)
示例代码
7、FileInputStream书写细节
8、FileInputStream的循环读取
细节误区:
9、文件拷贝
9.1、文件拷贝的基本代码
课堂练习:要求统计一下拷贝时间,单位毫秒
9.2、文件拷贝的弊端
9.3、文件拷贝弊端的解决方案(一次读多个字节)
示例代码:
改进方法:
9.4、文件拷贝代码改写
10、IO流中不同JDK版本捕获异常的方式
示例代码
简化方案:(了解即可)
代码实现:(但在实际开发中几乎所有的异常都是抛出处理的)
JDK7
JDK9
四、字符集
1、ASCII字符集(0-127)
1.1、计算机的存储规则(英文)
编码:
解码:
2、GBK字符集
主要掌握
2.1、计算机的存储规则(英文)(GBK)
2.2、计算机的存储规则(汉字)(GBK)
高位字节二进制一定以1开头,是为了和英文做出区分
解码:(直接转成十进制即可)
3.3、小结
核心1: GBK中,一个英文字母一个字节,二进制第一位是0
核心2: GBK中,一个中文汉字两个字节,二进制第一位是1
3、Unicode字符集
为了减少浪费,那么就有了UTF-8编码规则:
3.1、UTF-8是一个字符集吗?
不是,UTF-8只是Unicode字符集的一种编码方式
3.2、Unicode字符集练习
3.3、小结
五、为什么会有乱码?
1、如何不产生乱码?
2、扩展
因为拷贝的时候是一个字节一个字节拷贝的,数据没有出现丢失,那么只要记事本打开的字符集和编码方式也和数据源保持一致,就不会出现乱码。
3、Java中的编解码方法
六、字符流
1、字符流的体系架构
2、FileReader(字符输入流)
2.1、创建字符输入流对象
//1.创建对象并关联本地文件FileReader fr = new FileReader("myio\\a.txt");
2.2、读取数据
示例代码:(空参的read方法)
示例代码(带参的read方法)
//read(chars):读取数据,解码,强转三步合并了,把强转之后的字符放到数组当中 //空参的read + 强转类型转换
2.3、释放资源
示例代码:
3、FileWriter(字符输出流)
3.1、构造方法
3.2、成员方法
3.3、FileWriter书写细节
4、字符输出流写出数据
4.1、write(int c):写出一个字符
示例代码:(字节流,每次只能操作一个字节)
4.2、write(String str):写出一个字符串
4.3、write(char[] cbuf):写出一个字符数组
5、字符流原理解析
5.1、字符输入流(FileReader)的原理解析
示例代码:(底层揭秘)
Ⅰ、创建字符输入流对象
Ⅱ、读取数据
扩展:
5.2、字符输出流(FileWriter)的原理解析
数据会先写到缓冲区中
示例代码:(当出现字节数组装满了、被刷新、被关闭三种任意一种时,字节数组中的数据都会被写入到文件当中)
七、综合练习
1、字节流和字符流的使用场景
2、练习一:拷贝(字节流)
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class Test01 {public static void main(String[] args) throws IOException {//拷贝一个文件夹,考虑子文件夹//1.创建对象表示数据源File src = new File("D:\\aaa\\src");//2.创建对象表示目的地File dest = new File("D:\\aaa\\dest");//3.调用方法开始拷贝copydir(src,dest);}/** 作用:拷贝文件夹* 参数一:数据源* 参数二:目的地** */private static void copydir(File src, File dest) throws IOException {dest.mkdirs();//递归//1.进入数据源File[] files = src.listFiles();//2.遍历数组for (File file : files) {if(file.isFile()){//3.判断文件,拷贝FileInputStream fis = new FileInputStream(file);FileOutputStream fos = new FileOutputStream(new File(dest,file.getName()));byte[] bytes = new byte[1024];int len;while((len = fis.read(bytes)) != -1){fos.write(bytes,0,len);}fos.close();fis.close();}else {//4.判断文件夹,递归copydir(file, new File(dest,file.getName()));}}}
}
3、练习二:文件加密
小知识:如果一个数字它异或另外一个数字两次,那么它得到的数字就是它本身
^ : 异或两边相同:false两边不同:true
加密:
解密:
4、练习三:修改文件中的数据
细节1:文件中的数据不要换行细节2:bom头
在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码。其实UTF-8 的BOM对UFT-8没有作用,是为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行。
示例代码:(常规写法)
//1.读取数据FileReader fr = new FileReader("myio\\a.txt");StringBuilder sb = new StringBuilder();int ch;while((ch = fr.read()) != -1){sb.append((char)ch);}fr.close();System.out.println(sb);//2.排序String str = sb.toString();String[] arrStr = str.split("-");//2-1-9-4-7-8ArrayList<Integer> list = new ArrayList<>();for (String s : arrStr) {int i = Integer.parseInt(s);list.add(i);}Collections.sort(list);System.out.println(list);//3.写出FileWriter fw = new FileWriter("myio\\a.txt");for (int i = 0; i < list.size(); i++) {if(i == list.size() - 1){fw.write(list.get(i) + "");}else{fw.write(list.get(i) + "-");}}fw.close();
示例代码:(非常规写法—Stream && 方法引用)
//1.读取数据FileReader fr = new FileReader("myio\\a.txt");StringBuilder sb = new StringBuilder();int ch;while((ch = fr.read()) != -1){sb.append((char)ch);}fr.close();System.out.println(sb);//2.排序Integer[] arr = Arrays.stream(sb.toString().split("-")).map(Integer::parseInt).sorted().toArray(Integer[]::new);//3.写出FileWriter fw = new FileWriter("myio\\a.txt");String s = Arrays.toString(arr).replace(", ","-");String result = s.substring(1, s.length() - 1);fw.write(result);fw.close();
八、IO流体系中的高级流
1、缓冲流
1.1、字节缓冲流
缓冲流是一个高级流,是对基本流的一个包装
利用字节缓冲流拷贝文件:(示例代码)
需求: * 利用字节缓冲流拷贝文件 * * 字节缓冲输入流的构造方法: * public BufferedInputStream(InputStream is) * * 字节缓冲输出流的构造方法: * public BufferedOutputStream(OutputStream os)
默认缓冲区都是8192,基本流的关闭在底层会自动执行
//1.创建缓冲流的对象BufferedInputStream bis = new BufferedInputStream(new FileInputStream("myio\\a.txt"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("myio\\a.txt"));//2.循环读取并写到目的地int b;while ((b = bis.read()) != -1) {bos.write(b);}//3.释放资源bos.close();bis.close();
利用字节缓冲流拷贝文件:(一次读写多个字节)
//1.创建缓冲流的对象BufferedInputStream bis = new BufferedInputStream(new FileInputStream("myio\\a.txt"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("myio\\copy2.txt"));//2.拷贝(一次读写多个字节)byte[] bytes = new byte[1024];int len;while((len = bis.read(bytes)) != -1){bos.write(bytes,0,len);}//3.释放资源bos.close();bis.close();
1.2、字节缓冲流提高效率的原理
倒手的过程是在内存中发生的,而内存的速度是非常快的,几乎可以忽略不计
它真正节约的是读和写的时候跟硬盘之间打交道的时间,其根本原因是因为字节流默认不使用缓冲区;切勿与字符流搞混
1.3、字符缓冲流
但是因为字符流本身就带有缓冲区,所以字符缓冲流对效率的提升就不是很明显。
构造方法:
特有方法:
package com.yaqi.mybufferedstream1;import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;public class BufferedStreamDemo3 {public static void main(String[] args) throws IOException {/** 字符缓冲输入流:* 构造方法:* public BufferedReader(Reader r)* 特有方法:* public String readLine() 读一整行** *///1.创建字符缓冲输入流的对象BufferedReader br = new BufferedReader(new FileReader("myio\\a.txt"));//2.读取数据//细节://readLine方法在读取的时候,一次读一整行,遇到回车换行结束// 但是他不会把回车换行读到内存当中/* String line1 = br.readLine();System.out.println(line1);String line2 = br.readLine();System.out.println(line2);*/String line;while ((( line = br.readLine()) != null)){System.out.println(line);}//3.释放资源br.close();}
}
1.4、小结
1.5、练习
1.5.1练习一:拷贝文件
package com.yaqi.mytest;import java.io.*;public class Test05 {public static void main(String[] args) throws IOException {/*四种方式拷贝文件,并统计各自用时*/long start = System.currentTimeMillis();//method1();//method2(); //16.253秒//method3(); //95.466秒//method4(); //17.686秒long end = System.currentTimeMillis();System.out.println((end - start) / 1000.0 + "秒");}//字节流的基本流:一次读写一个字节4,588,568,576 字节public static void method1() throws IOException {FileInputStream fis = new FileInputStream("E:\\aaa\\CentOS-7-x86_64-DVD-1810.iso");FileOutputStream fos = new FileOutputStream("myio\\copy.iso");int b;while ((b = fis.read()) != -1) {fos.write(b);}fos.close();fis.close();}//字节流的基本流:一次读写一个字节数组public static void method2() throws IOException {FileInputStream fis = new FileInputStream("E:\\aaa\\CentOS-7-x86_64-DVD-1810.iso");FileOutputStream fos = new FileOutputStream("myio\\copy.iso");byte[] bytes = new byte[8192];int len;while ((len = fis.read(bytes)) != -1) {fos.write(bytes, 0, len);}fos.close();fis.close();}//字节流的基本流:一次读写一个字节数组public static void method3() throws IOException {BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\aaa\\CentOS-7-x86_64-DVD-1810.iso"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("myio\\copy.iso"));int b;while ((b = bis.read()) != -1) {bos.write(b);}bos.close();bis.close();}//字节流的基本流:一次读写一个字节数组public static void method4() throws IOException {BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\aaa\\CentOS-7-x86_64-DVD-1810.iso"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("myio\\copy.iso"));byte[] bytes = new byte[8192];int len;while ((len = bis.read(bytes)) != -1) {bos.write(bytes, 0, len);}bos.close();bis.close();}
}
1.5.2练习二:修改文本顺序
示例代码:(Collections排序)
示例代码:(TreeMap排序)
1.5.3练习三:软件的运行次数
实现一个验证程序运行次数的小程序,要求如下: 1.当程序运行超过3次时给出提示:本软件只能免费使用3次,欢迎您注册会员后继续使用~ 2.程序运行演示如下:第一次运行控制台输出: 欢迎使用本软件,第1次使用免费~第二次运行控制台输出: 欢迎使用本软件,第2次使用免费~第三次运行控制台输出: 欢迎使用本软件,第3次使用免费~第四次及之后运行控制台输出:本软件只能免费使用3次,欢迎您注册会员后继续使用~
//原则:
//IO:随用随创建
// 什么时候不用什么时候关闭
2、转换流(字符流的一种)
转换流是字符流和字节流之间的桥梁
2.1、转换流的基本用法
指定字符集读取:
package com.yaqi.myconvertstream;import java.io.*;
import java.nio.charset.Charset;public class ConvertStreamDemo1 {public static void main(String[] args) throws IOException {/*利用转换流按照指定字符编码读取(了解)因为JDK11:这种方式被淘汰了。替代方案(掌握)F:\JavaSE最新版\day29-IO(其他流)\资料\gbkfile.txt*//* //1.创建对象并指定字符编码InputStreamReader isr = new InputStreamReader(new FileInputStream("myio\\gbkfile.txt"),"GBK");//2.读取数据int ch;while ((ch = isr.read()) != -1){System.out.print((char)ch);}//3.释放资源isr.close();*/FileReader fr = new FileReader("myio\\gbkfile.txt", Charset.forName("GBK"));//2.读取数据int ch;while ((ch = fr.read()) != -1){System.out.print((char)ch);}//3.释放资源fr.close();}
}
利用转换流按照指定字符编码写出数据:
import java.io.*;
import java.nio.charset.Charset;public class ConvertStreamDemo2 {public static void main(String[] args) throws IOException {/*利用转换流按照指定字符编码写出*//*//1.创建转换流的对象OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myio\\b.txt"),"GBK");//2.写出数据osw.write("你好你好");//3.释放资源osw.close();*/FileWriter fw = new FileWriter("myio\\c.txt", Charset.forName("GBK"));fw.write("你好你好");fw.close();}
}
2,2、练习一:转换文件编码
将本地文件中的GBK文件,转成UTF-8
package com.yaqi.myconvertstream;import java.io.*;
import java.nio.charset.Charset;public class ConvertStreamDemo3 {public static void main(String[] args) throws IOException {/*将本地文件中的GBK文件,转成UTF-8*///1.JDK11以前的方案/* InputStreamReader isr = new InputStreamReader(new FileInputStream("myio\\b.txt"),"GBK");OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myio\\d.txt"),"UTF-8");int b;while((b = isr.read()) != -1){osw.write(b);}osw.close();isr.close();*///2.替代方案FileReader fr = new FileReader("myio\\b.txt", Charset.forName("GBK"));FileWriter fw = new FileWriter("myio\\e.txt",Charset.forName("UTF-8"));int b;while ((b = fr.read()) != -1){fw.write(b);}fw.close();fr.close();}
}
2.3、练习二:读取文件中的数据
package com.yaqi.myconvertstream;import java.io.*;public class ConvertStreamDemo4 {public static void main(String[] args) throws IOException {/*利用字节流读取文件中的数据,每次读一整行,而且不能出现乱码//1.字节流在读取中文的时候,是会出现乱码的,但是字符流可以搞定//2.字节流里面是没有读一整行的方法的,只有字符缓冲流才能搞定*//* FileInputStream fis = new FileInputStream("myio\\a.txt");InputStreamReader isr = new InputStreamReader(fis);BufferedReader br = new BufferedReader(isr);String str = br.readLine();System.out.println(str);br.close();*/BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("myio\\a.txt")));String line;while ((line = br.readLine()) != null){System.out.println(line);}br.close();}
}
2.4、小结
3、序列化流/对象操作输出流(字节流的一种)(ObjectOutputStream)
3.1、构造方法
3.2、成员方法
3.3、利用序列化流,把一个对象写到本地文件中
3.4、序列化流的小细节(NotSerializableException)
4、反序列化流/对象操作输入流(ObjectInputStream)
4.1、利用反序列化流/对象操作输入流,把文件中的对象读到程序当中
4.2、序列号不匹配
4.3、瞬态关键字(不会把当前属性序列化到本地文件中)
4.4、小结
4.5、综合练习:读写多个对象(先写再读)
5、打印流
5.1、字节打印流的构造方法
5.2、字节打印流的成员方法
5.3、占位符扩展
5.4、字符打印流的构造方法
5.5、字符打印流的成员方法
5.6、打印流的应用场景
5.7、小结
6、解压缩流/压缩流
6.1、解压缩流
6.2、压缩流(压缩单个文件)
6.3、压缩流(压缩文件夹)
7、Commons-io
7.1、Commons-io使用步骤
7.2、Commons-io常见方法
8、Hutool工具包
8.1、IO包的封装类
8.2、FileUtil类
九、综合练习
1、制造假数据
1.1、爬取姓氏
1.2、爬取名字
1.3、数据处理
1.4、数据处理并写出
1.5、利用HuTool包生成假数据
2、随机点名器
2.1、练习1:普通随机点名
2.2、练习2:加入了概率和统计
2.3、练习3:作弊功能
2.4、练习4:随机不能重复,自动开启第二轮
2.5、练习5:带权重的随机
3、登录注册
3.1、练习1:写一个登录小案例
3.2、练习2:添加锁定账号功能
3.3、练习3:补全拼图小游戏的登录注册(考虑多个用户)
4、游戏的存档和读档
4.1、存档
4.2、读档
4.3、修改bug
5、游戏配置
5.1、配置文件的优点
5.2、常见的配置文件
5.3、properties配置文件
5.4、Properties作为Map集合的操作
5.5、Properties跟IO流结合的操作(store)
5.6、读取Properties(load)
5.7、拼图游戏的配置文件
4、每日一记(IO的最终大作业)
相关文章:
黑马Java——IO流
一、IO流的概述 IO流:存储和读取数据的解决方案 IO流和File是息息相关的 1、IO流的分类 1.1、纯文本文件 word、Excel不是纯文本文件 而txt或者md文件是纯文本文件 2、小结 二、IO流的体系结构 三、字节流 1、FileOutputStream(字节输出流ÿ…...
re:从0开始的CSS学习之路 11. 盒子垂直布局
1. 盒子的垂直布局的注意 若两个“相邻”垂直摆放的盒子,上面盒子的下外边距与下面盒子的上外边距会发生重叠,称为外边距合并 若合并后,外边距会选择重叠外边距的较大值 若两个盒子具有父子关系,则两个盒子的上外边距会发生重叠&…...
Kindling-OriginX 如何集成 DeepFlow 的数据增强网络故障的解释力
DeepFlow 是基于 eBPF 的可观测性开源项目,旨在为复杂的云基础设施及云原生应用提供深度可观测性。DeepFlow 基于 eBPF 采集了精细的链路追踪数据和网络、应用性能指标,其在网络路径上的全链路覆盖能力和丰富的 TCP 性能指标能够为专业用户和网络领域专家…...
轻松掌握Jenkins执行远程window的Jmeter接口脚本
Windows环境:10.1.2.78 新建与配置节点 【系统管理】—【管理节点】—【新建节点】输入节点名称,勾选“dumb slave”,点击ok 按如上配置: 说明: Name:定义slave的唯一名称标识,可以是任意字…...
UI文件原理
使用UI文件创建界面很轻松很便捷,他的原理就是每次我们保存UI文件的时候,QtCreator就自动帮我们将UI文件翻译成C的图形界面创建代码。可以通过以下步骤查看代码 到工程编译目录,一般就是工程同级目录下会生成另一个编译目录,会找到…...
OS设备管理
设备管理 操作系统作为系统资源的管理者,其提供的功能有:处理机管理、存储器管理、文件管理、设备管理。其中前三个管理都是在计算机的主机内部管理其相对应的硬件。 I/O设备 I/O即输入/输出。I/O设备即可以将数据输入到计算机,或者可以接收…...
Matlab绘图经典代码大全:条形图、极坐标图、玫瑰图、填充图、饼状图、三维网格云图、等高线图、透视图、消隐图、投影图、三维曲线图、函数图、彗星图
学会 MATLAB 中的绘图命令对初学者来说具有重要意义,主要体现在以下几个方面: 1. 数据可视化。绘图命令是 MATLAB 中最基本也是最重要的功能之一,它可以帮助初学者将数据可视化,更直观地理解数据的分布、变化规律和趋势。通过绘制图表,可以快速了解数据的特征,从而为后续…...
姿态传感器MPU6050模块之陀螺仪、加速度计、磁力计
MEMS技术 微机电系统(MEMS, Micro-Electro-Mechanical System),也叫做微电子机械系统、微系统、微机械等,指尺寸在几毫米乃至更小的高科技装置。微机电系统其内部结构一般在微米甚至纳米量级,是一个独立的智能系统。 微…...
MySQL 基础知识(一)之数据库和 SQL 概述
目录 1 数据库相关概念 2 数据库的结构 3 SQL 概要 4 SQL 的基本书写规则 1 数据库相关概念 数据库是将大量的数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合数据库管理系统(DBMS)是用来管理数据库的计算机系统…...
挑战杯 wifi指纹室内定位系统
简介 今天来介绍一下室内定位相关的原理以及实现方法; WIFI全称WirelessFidelity,在中文里又称作“行动热点”,是Wi-Fi联盟制造商的商标做为产品的品牌认证,是一个创建于IEEE 802.11标准的无线局域网技术。基于两套系统的密切相关ÿ…...
Midjourney提示词风格调试测评
在Midjourney中提示词及风格参数的变化无疑会对最终的作品产生影响,那影响具体有多大?今天我我们将通过一个示例进行探究。 示例提示词: 计算机代码海洋中的黄色折纸船(图像下方)风格参考:金色长发的女人,…...
Codeforces Round 926 (Div. 2)(A~C)
A. Sasha and the Beautiful Array 分析:说实话,打比赛的时候看到这题没多想,过了一下样例发现将数组排序一下就行,交了就过了。刚刚写题解反应过来,a2-a1a3-a2.....an-a(n-1) an - a1,所以最后结果只取决…...
Godot 游戏引擎个人评价和2024年规划(无代码)
文章目录 前言Godot C# .net core 开发简单评价Godot相关网址可行性 Godot(GDScirpt) Vs CocosGodot VS UnityUnity 的裁员Unity的股票Unity的历史遗留问题:Mono和.net core.net core的开发者,微软 个人的独立游戏Steam平台分成说明独立游戏的选题美术风…...
Win11关闭Windows Defender实时保护,暂时关闭和永久关闭方法 | Win10怎么永久关闭Windows Defender实时保护
文章目录 1. 按2. 暂时关闭Windows Defender实时保护3. 永久关闭实时保护 1. 按 开启Windows Defender实时保护有时候会导致系统变得异常卡顿,严重影响系统的流畅度,并且由于会有几率错误拦截和查杀我们的正常操作,所以还会导致我们的程序无…...
C# CAD2016 宗地生成界址点,界址点编号及排序
1 、界址点起点位置C# CAD2016 多边形顶点按方向重新排序 2、 界址点顺时针逆时针走向 C# CAD2016 判断多边形的方向正时针或逆时针旋转 3、块文件插入 //已知块文件名称 GXGLQTC //块文件需要插入的坐标点 scaledPoint// 插入块到当前图纸中的指定位置ObjectId newBlockId;B…...
[ai笔记7] google浏览器ai学习提效定制优化+常用插件推荐
欢迎来到文思源想的ai空间,这是技术老兵重学ai以及成长思考的第7篇分享! 工欲善其事必先利其器,为了ai学习的效能提升,放假期间对google浏览器做了一次系统整改,添加了一些配置和插件,这里既有一些显示、主…...
联想thinkpad-E450双系统升级记
早期笔记本联想thinkpad-E450双系统 大约16年花4000多大洋,买了一台thinkpad-E450屏幕是16寸本,有AMD独立显卡,i5cpu,4G内存。 . 后来加了一个同型号4G内存组成双通道, . 加了一个三星固态500G, . 换了一个…...
Mysql运维篇(四) Xtarbackup--备份与恢复练习
一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。如有侵权,请留言,我及时删除! 前言 xtrabackup是Percona公司CTO Vadim参与开发的一款基于InnoDB的在线热备工具,具有…...
vue3 封装一个通用echarts组件
实现这个组件需要引入echarts和vue-echarts插件,使用vue-echarts是因为它帮我们封装了一些很常用的功能,比如监听页面resize后重新渲染功能,本次组件只使用到了autoresize配置,其它可以根据官方文档按需选配 https://github.com/…...
安装 Windows Server 2003
1.镜像安装 镜像安装:Windows Server 2003 2.安装过程(直接以图的形式呈现) 按Enter(继续),继续后F8继续 直接Enter安装 下一步 秘钥:GM34K-RCRKY-CRY4R-TMCMW-DMDHM 等待安装成功即可...
在STM32中使用DMA进行SD卡读写操作的实现方法
在STM32中,使用DMA进行SD卡的读写操作可以提高数据传输的速度和效率。下面是在STM32中使用DMA进行SD卡读写操作的实现方法: ✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进 ❤欢迎关注我的知乎:对error视而不见…...
StringBuilder/StringBuffer类(Java)
StringBuilder/StringBuffer类 当对字符串进行修改的时候,使用 StringBuffer / StringBuilder 类更方便。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。方法类似 public class…...
SQL的1999语法
目录 交叉连接 实现交叉连接 自然连接 实现自然连接(实际上就是内连接) ON和USING 使用自然连接时要求两张表的字段名称相同,但是如果不相同或者两张表中有两组字段是重名,这时就要利用 ON 子句指定关联条件,利用 USING 子句…...
【AIGC】Stable Diffusion安装包
Stable Diffusion 的安装教程通常分为以下几个步骤: 一、安装 Python: 确保您的系统中已经安装了 Python,并且版本符合 Stable Diffusion 的要求。通常情况下,Python 版本应为 3.6 或更高版本。您可以从 Python 官方网站下载并安…...
C++:迭代器的封装思想
C:迭代器的封装思想 list迭代器实现反向迭代器实现 本博客将通过实现list的迭代器,以及它的反向迭代器,来帮助大家理解迭代器的底层逻辑,以及封装思想。 list迭代器实现 迭代器是一个遍历容器的工具,其可以通过自增自…...
飞天使-k8s知识点17-kubernetes实操2-pod探针的使用
文章目录 探针的使用容器探针启动实验1-启动探针的使用-startupprobeLiveness Probes 和 Readiness Probes演示若存在started.html 则进行 探针的使用 kubectl edit deploy -n kube-system corednslivenessprobe 的使用 livenessProbe:failureThreshold: 5httpGet:path: /heal…...
tee漏洞学习-翻译-3:TrustZone exploit for MSM8974
原文:http://bits-please.blogspot.com/2015/08/full-trustzone-exploit-for-msm8974.html 在这篇博文中,我们将介绍利用上一篇文章中描述的 TrustZone 漏洞的完整过程。 在开发此漏洞时,我只使用了我值得信赖的(个人࿰…...
rust递归遍历磁盘目录及文件
Std库实现 //遍历dir目录,找出修改日期距离当前超过age天的文件名称,存入file_list中 fn visit_dir(dir: &Path, file_list: &mut Vec<String>, age: u64) -> io::Result<()> {if dir.is_dir() {for entry in fs::read_dir(dir)…...
C语言每日一题(56)平衡二叉树
力扣网 110 平衡二叉树 题目描述 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1: 输入:root [3,9,20,…...
Flutter Android开发 梳理Google Material Design颜色体系
前言 做安卓开发(Kotlin语言),Flutter开发的人员应该都听说过谷歌一直推崇的Material Design,而Material Design Color是其推崇的颜色体系,具体来说,Material Design Color是一套旨在帮助设计师和开发者创…...
每日五道java面试题之java基础篇(六)
目录: 第一题:Java 创建对象有哪⼏种⽅式?第二题 .Integer a 127,Integer b 127;Integer c 128,Integer d 128;相等吗?第三题.Object 类的常⻅⽅法?第四题 List和Set的区别第五题 ArrayList和…...
c++ STL系列——(五)map
目录 引言 特点 包含头文件 基本特性 基本操作 插入元素 访问元素 移除元素 检查是否包含某个键 获取元素数量 高级特性 迭代器 自定义比较函数 实际应用 统计字符出现次数 缓存最近访问的元素 总结 引言 在C中,标准模板库(STL…...
Huggingface 文档翻译完毕
Accelerate 0.27 中文文档音频课程文档AutoTrain 中文文档AWS 中文文档竞赛中文文档Diffusers 0.26 中文文档深度强化学习课程文档数据集服务器中文文档Datasets 2.17 中文文档 Evaluate 0.4 中文文档Huggingface.js 中文文档Hub 中文文档Hub 客户端库 JS 0.20 中文文档推理 AP…...
C++中类的6个默认成员函数 【拷贝构造函数】
文章目录 拷贝构造函数的使用拷贝构造对于自定义类型【浅拷贝】深拷贝拷贝构造函数典型调用场景 拷贝构造函数的使用 在前几章学习对象的时候,我们有的时候需要一个与已存在对象一某一样的新对象 那在创建对象时,可否创建一个与已存在对象一某一样的新对…...
【前端高频面试题--Vuex下篇】
🚀 作者 :“码上有前” 🚀 文章简介 :前端高频面试题 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬前端高频面试题--Vuex篇 往期精彩内容Vuex 的原理Vuex中action和mutation的区别Vuex 和 localStor…...
MySQL性能调优篇(4)-查询语句的优化与重构
MySQL数据库查询语句的优化与重构 MySQL是一种常用的关系型数据库管理系统,广泛应用于Web开发中。在实际应用中,对数据库查询语句的优化和重构是提高应用性能和响应速度的重要手段。本文将介绍一些常见的优化技巧和重构方法,帮助开发者提高数…...
LInux、源码编译安装
步骤: 步骤1:安装开发工具gcc与make,释放源代码至指定目录 yum -y install gcc make 步骤2:tar解包,释放源代码至指定目录 tar -xf /root/tools.tar.gz -C /usr/local 步骤3:./configure 配置,…...
wordpress好的网站主题
有什么好的网站主题,都分享在这里了。 蓝色风格的wordpress模板,好的wordpress网站主题,需要既好看,又好用。 https://www.zhanyes.com/qiye/6305.html 血红色的好看的wordpress主题,布局经典,设计好的&am…...
【Java多线程】对进程与线程的理解
目录 1、进程/任务(Process/Task) 2、进程控制块抽象(PCB Process Control Block) 2.1、PCB重要属性 2.2、PCB中支持进程调度的一些属性 3、 内存分配 —— 内存管理(Memory Manage) 4、线程(Thread)…...
C# CAD交互界面-自定义面板集-查找定位(六)
运行环境 vs2022 c# cad2016 调试成功 一、代码说明 1. 类成员变量声明: List<ObjectId> objectIds new List<ObjectId>(); // 用于存储AutoCAD实体对象的ObjectId列表 private static Autodesk.AutoCAD.Windows.PaletteSet _ps2; // 自定义浮动面板…...
5.7 BCC工具之disksnoop.py解读
一,disksnoop.py简介 disksnoop工具用于追踪块设备的I/O操作的延迟,它会在每次I/O执行完成后打印一行摘要信息。我们根据这些摘要日志,来分析当前的I/O操作是否存在延迟,以判断I/O是否达到了瓶颈。 二,代码示例 #!/usr/bin/python # # disksnoop.py Trace block device…...
QT:实现图片选择器
一、效果图 二、用到的类 qApp:可以快速获取到项目目录位置。 QSettings :编写config文件,记录上次打开图片的位置,下次打开图片会从上次的位置查找图片。 QPixmap:用于图片的缩放,防止图片过小࿰…...
LLM大模型相关问题汇总---包括问题与答案
一、基础篇 1. 目前主流的开源模型体系有哪些? - Transformer体系:由Google提出的Transformer模型及其变体,如BERT、GPT等。 - PyTorch Lightning:一个基于PyTorch的轻量级深度学习框架,用于快速原型设计和实验…...
自动化测试定位不到元素怎么办?
1.动态id定位不到元素 分析原因:每次打开页面,ID都会变化。用ID去找元素,每次刷新页面ID都会发生变化。 解决方案:推荐使用xpath的相对路径方法或者cssSelector查找到该元素。 2.iframe原因定位不到元素 分析原因:…...
1 scala集合-数组
1 定长数组 定长数组,是指数组长度不可变。定义定长数组的方法有如下两种: 方法1: var/val variable_name new Array[元素类型](数组长度) // 通过制定长度定义例如,定义一个长度为20的Int 类型数组。 scala> val a new …...
双场板功率GaN HEMT电容模型以精确模拟开关行为
标题:Capacitance Modeling in Dual Field-Plate Power GaN HEMT for Accurate Switching Behavior(TED.16年) 摘要 本文提出了一种基于表面电位的紧凑模型,用于模拟具有栅极和源极场板(FP)结构的AlGaN/G…...
OpenCV Mat实例详解 四
OpenCV Mat实例详解三中详细介绍来了OpenCV Mat类的公有静态成员函数,下面介绍OpenCV Mat类的其他常用成员函数。 OpenCV Mat类常用成员函数 Mat & adjustROI (int dtop, int dbottom, int dleft, int dright); dtop ROI 上边界移动值,如…...
Fluke ADPT 连接器新增对福禄克万用 Fluke 106 的支持
所需设备: 1、Fluke ADPT连接器; 2、Fluke 106; Fluke 106 拆机图: 显示界面如下图: 并且可以将波形导出到EXCEL: 福禄克万用表需要自己动手改造!!!...
算法-3-基本的数据结构
单双链表 1.单链表双链表如何反转 import java.util.ArrayList; import java.util.List;public class Code01_ReverseList {public static class Node {public int value;public Node next;public Node(int data) {value data;}}public static class DoubleNode {public int…...
探秘Java反射:灵活编程的利器
前言 大家好,我是chowley,不知道大家在学习Java的过程中有没有听过反射的概念,今天我来总结一下我心中的Java反射。 在Java编程中,反射是一种强大的工具,它允许程序在运行时检查和操作类、方法、属性等,而…...