【文件操作与IO】详细解析文件操作与IO (二)
本篇博客是上一篇文章的续写,重点介绍数据流,还包括三道练习题.
🐎文章专栏: JavaEE初阶
🚀若有问题 评论区见
❤ 欢迎大家点赞 评论 收藏 分享
如果你不知道分享给谁,那就分享给薯条.
你们的支持是我不断创作的动力 .
王子,公主请阅🚀
- 要开心
- 要快乐
- 顺便进步
- 1.数据流
- 1.1 字节流
- 1.1.1 InputStream概述
- 1.1. 2 OutputStream概述
- 1.2 字符流
- 1.2.1 Reader
- 1.2.2 Writer
- 2.小程序练习
- 练习一
- 练习二
- 练习三
要开心
要快乐
顺便进步
1.数据流
什么是输入?什么是输出呢?
文件操作中输入和输出是站在CPU的角度来说的.
1.1 字节流
1.1.1 InputStream概述
InputStream只是一个抽象类, 要使用还需要具体的实现类. 关于 InputStream 的实现类有很多,基本可以认为不同的输入设备都可以对应一个 InputStream 类,我们现在只关心从件中读取,所以使用 FileInputStream.
注意抽象类不能new实例,只能new子类.
FileInputStream 概述
代码示例1:
public class InputStream示例一 {public static void main(String[] args) {//需要先在D盘上准备一个test.txt文件.此处文件内容为 你好世界try(InputStream inputStream = new FileInputStream("d:/test.txt")) {while(true) {int n = inputStream.read();//无参数read方法,一次读取一个字节.if(n == -1) {//表示已经读完break;}char ret = (char)n;System.out.println(n);}} catch (IOException e) {throw new RuntimeException(e);}}
}
问题1: 不是字节流吗?为什么数据类型不用byte,要用int?
我们知道当read()方法返回-1时,说明已经读取完毕,如果用byte就接收不了-1了.
同样地,在字符流中也是用int类型作为返回值类型.
一个字节,8个比特位,2^8 - 1= 255
所以范围是[-1,255]
问题2: try(InputStream inputStream = new FileInputStream(“d:/test.txt”)){}是什么意思?所有的对象都适用吗?
try with resources这个语法的目的就是
()定义的变量会在 try 代码块结束的时候(无论是正常结束还是抛出异常),自动调用其中的 close 方法.
同时要求写到()里的对象必须要实现Closeable接口.
代码示例2:
public class InputStream示例一 {public static void main(String[] args) {//需要先在D盘上准备一个test.txt文件.此处文件内容为 你好世界//此处使用try(){},是为了防止忘记close().try(){}能够帮助我们自动close().try(InputStream inputStream = new FileInputStream("d:/test.txt")) {while(true) {int n = inputStream.read();//无参数read方法,一次读取一个字节.if(n == -1) {//表示已经读完break;}char ret = (char)n;System.out.println(n);}} catch (IOException e) {throw new RuntimeException(e);}}
}
两个示例相比之下,后一种的IO次数更少,性能更好.
代码示例3: 这里我们把文件内容中填充中文看看,注意,写中文的时候使用 UTF-8 编码。test.txt 中填写 “你好世界”
注意:这里我利用了这几个中文的 UTF-8 编码后长度不超过 1024 字节的现状,但这种方式并不是通用的
public class InputStream示例二 {//需要先在D盘上准备一个test.txt文件.此处文件内容为 你好世界//此处使用try(){},是为了防止忘记close().try(){}能够帮助我们自动close().public static void main(String[] args) {try(InputStream inputStream = new FileInputStream("d:/test.txt")) {byte[] buf = new byte[1024];while(true) {int len = inputStream.read(buf);if(len == -1) {//文件全部读完break;}//test文件内容是字符串类型的,buf是字节类型的,要想打印出原内容,得先转成字符串类型.String s = new String(buf);System.out.println(s);}} catch (IOException e) {throw new RuntimeException(e);}}
}
利用Scanner进行字符读取
上述例子中,我们看到了对字符类型直接使用 InputStream 进行读取是非常麻烦且困难的,所以,我们使用一种我们之前比较熟悉的类来完成该工作,就是 Scanner 类。
public class InputStream示例三 {
//需要现在D盘上创建一个test.txt文件,并填充"你好世界"public static void main(String[] args) throws IOException{try(InputStream inputStream = new FileInputStream("d:/test.txt")) {Scanner sc = new Scanner(inputStream);String s = sc.next();System.out.println(s);} catch (IOException e) {throw new RuntimeException(e);}}
}
1.1. 2 OutputStream概述
OutputStream 同样只是一个抽象类,要使用还需要具体的实现类。我们现在还是只关心写入文件中,所以使用 FileOutputStream.
利用OutputStream的writer方法 进行字符写入
代码示例一:
public class OutputStream示例一 {public static void main(String[] args) {//在test文件中写入hello,会将原有内容覆盖.try(OutputStream outputStream = new FileOutputStream("d:/test.txt")) {String s = "HelloWorld";outputStream.write(s.getBytes());//不要忘记flushoutputStream.flush();} catch (IOException e) {throw new RuntimeException(e);}}
}
若是不想将原有内容覆盖,该怎么操作?
public class OutputStream示例一 {public static void main(String[] args) {//在test文件中写入hello,会将原有内容覆盖.try(OutputStream outputStream = new FileOutputStream("d:/test.txt",true)) {//构造时,加上true.表示不将原有内容覆盖.String s = "HelloWorld";outputStream.write(s.getBytes());//不要忘记flushoutputStream.flush();} catch (IOException e) {throw new RuntimeException(e);}}
}
代码示例二:
public class OutputStream示例二 {public static void main(String[] args) {try(OutputStream outputStream = new FileOutputStream("d:/test.txt",true)) {byte[] b = new byte[] {(byte)'G',(byte)'o',(byte)'o',(byte)'d'};outputStream.write(b);String s = new String(b);System.out.println(s);//不要忘记flushoutputStream.flush();} catch (IOException e) {throw new RuntimeException(e);}}
}
1.2 字符流
字符流的输入输出和字节流的输入输出使用方法类似. 这里只给代码示例,不做过多说明.
1.2.1 Reader
代码示例:
public class Demo7 {public static void main(String[] args) throws IOException {//无参数read方法,一次读一个字符.
// Reader reader = new FileReader("d:/test.txt");
//
// while(true) {
// int c = reader.read();
// if(c == -1) {
// break;
// }
// char ch = (char)c;
// System.out.print(ch);
// }//手动close//reader.close();//带有字符数组参数的read方法,将没有元素read()方法填满
// Reader reader = new FileReader("d:/test.txt");
// try{
// while(true) {//循环多次,把文件中的内容全部读完.
// char[] cubf = new char[2];
// //n表示读到的字符的个数
// int n = reader.read(cubf);
// if(n == -1) {
// //读取完毕
// break;
// }
// System.out.println("n = "+n);
// for (int i = 0; i < n; i++) {
// System.out.println(cubf[i]);
// }
// }
// }finally {
// //一个文件使用完了之后要记得close.
// reader.close();
// }try(Reader reader = new FileReader("d:/test.txt");) {while(true) {char[] cbuf = new char[3];int n = reader.read(cbuf);if(n == -1) {break;}System.out.println("n = "+ n);for (int i = 0; i < n; i++) {System.out.println(cbuf[i]);}}}}
}
Java中一个字符由UTF-8编码的是三个字节.24个比特位. 计算2^24发现 >> 65535. 最大范围不应该是2^24-1吗?
在 Java 标准库内部, 对于字符编码是进行了很多的处理工作的.
如果是只使用 char,此时使用的字符集,固定就是 unicode.
如果是使用 String,此时就会自动的把每个字符的 unicode 转换成 utf8.
同样表示一个汉字,utf8是3个字节,而unicode是2个字节.
也就是说char类型的数组中每一个字符都是unicode编码的.一旦使用这个字符数组构造成String,每一个字符就会被转换成utf8.
相应地,如果字符串s 调用 s.charAt(i),也会转换成unicode.
1.2.2 Writer
代码示例:
public class Demo8 {public static void main(String[] args) {try(Writer writer = new FileWriter("d:/test.txt",true)) {//不想删除原有数据,就得加true.//直接使用writer方法就可以写入数据writer.write("我在学习文件IO");} catch (IOException e) {throw new RuntimeException(e);}}
}
利用 PrintWriter 找到我们熟悉的方法
上述,我们其实已经完成输出工作,但总是有所不方便,我们接来下将 OutputStream 处理下,使用
PrintWriter 类来完成输出,因为
PrintWriter 类中提供了我们熟悉的 print/println/printf 方法
代码示例:
public class Demo12 {public static void main(String[] args) {try(OutputStream outputStream = new FileOutputStream("d:/test.txt")) {PrintWriter writer = new PrintWriter(outputStream);writer.printf("hello");writer.flush();} catch (IOException e) {throw new RuntimeException(e);}}
}
PrintWriter 这样的类, 在进行写入的时候,不一定是直接写硬盘, 而是先把数据写入到一个 内存构成的"缓冲区"中(buffer).
引入缓冲区,目的是为了提高效率!!!
当我们写入缓冲区之后,如果还没来得及把缓冲区的数据写入硬盘,进程就结束了,此时数据就丢了!!
为了能够确保数据确实被写入硬盘,就应该在合适的时机,使用 flush 方法手动刷新缓冲区.
2.小程序练习
运用文件地基本操作和文件内容读写操作实现一些小工具程序,锻炼我们地能力.
练习一
扫描指定目录,并找到名称中包含指定字符地所有普通文件(不包含目录),并且后序询问用户是否要删除文件.
import java.io.File;
import java.util.Scanner;/*** Date: 2025-04-2025/4/16* User: 11* Time: 23:13* 扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且询问用户是否要删除该文件.*/public class 实现练习1 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入你要扫描的目录: ");String path = sc.next();File rootpath = new File(path);//判断目录是否合法.if(!rootpath.isDirectory()) {System.out.println("输入的目录不合法!");}//输入要查询的关键字System.out.println("请输入要删除文件的关键词: ");String word = sc.next();//递归扫描目录scanDir(rootpath,word);}//递归扫描目录public static void scanDir(File rootpath,String word) {//1.先列出rootpath中所有文件和目录File[] files = rootpath.listFiles();if(files == null) {return;}for(File f : files) {//加个日志,方便观察当前递归的执行过程System.out.println("当前扫描文件: "+f.getAbsoluteFile());if(f.isDirectory()) {//目录继续递归scanDir(f,word);}else {//普通文件,判断是否删除.checkDelete(f,word);}}}public static void checkDelete(File f,String word) {if(!f.getName().contains(word)) {//不是word文件,不必删除.return;}//需要删除Scanner sc = new Scanner(System.in);System.out.println("当前文件为: "+f.getAbsoluteFile() +"请确认是否删除,请输入(Y/n): ");String choice = sc.next();if(choice.equals("Y") || choice.equals("y")) {f.delete();System.out.println("删除成功!");}else {System.out.println("取消删除!");}}
}
练习二
进行普通文件的复制
public class test2 {public static void main(String[] args) {//输入要被复制文件的路径Scanner sc = new Scanner(System.in);System.out.println("请输入文件路径: ");String s = sc.next();File sourceFile = new File(s);//判断文件是否存在.if(!sourceFile.exists()) {System.out.println("文件不存在,请确实路径是否正确!");}//判断文件是否为普通文件.if(!sourceFile.isFile()) {System.out.println("文件不是普通文件,请确认路径是否正确!");}System.out.println("请输入要复制到的目标路径: ");String destPath = sc.next();File destFile = new File(destPath);if(destFile.exists()) {if(destFile.isDirectory()) {System.out.println("目标路径已存在,并且是一个目录,请确认路径是否正确!");}if(destFile.isFile()) {System.out.println("目标路径已存在,并且是一个文件,请确认是否覆盖(y/n): ");String choice = sc.next();if(!choice.toLowerCase().contains("y")) {System.out.println("停止覆盖!");return;}}}//将文件从sourceFile处复制到destFile处try(InputStream is = new FileInputStream(sourceFile)) {try(OutputStream os = new FileOutputStream(destFile)) {byte[] buf = new byte[1024];int len;while(true) {len = is.read(buf);if(len == -1) {break;}os.write(buf,0,len);//将buf这个数组从下标0开始,写了len个.}os.flush();} catch (IOException e) {throw new RuntimeException(e);}} catch (IOException e) {throw new RuntimeException(e);}System.out.println("覆盖成功!");}
}
练习三
扫描指定目录,并找到内容中包含指定字符的所有普通文件(不包含目录)
注意:给出的代码性能较差,所以尽量不要在太复杂的目录下或者大文件下实验
public class test3 {public static void main(String[] args) throws IOException {Scanner sc = new Scanner(System.in);System.out.println("请输入你要扫描的路径: ");String rootPath = sc.next();File rootFile = new File(rootPath);//判断路径是否合法if(!rootFile.isDirectory()) {System.out.println("输入路径不合法!");}System.out.println("请输入你要找出的文件名中的字符: ");String word = sc.next();List<File> result = new ArrayList<>();//深度优先遍历(递归)dfs(rootFile,word,result);System.out.println("共找到了符合条件的文件: " + result.size() + "个, 它们分别是: ");for(File file : result) {System.out.println(file.getCanonicalPath());}}public static void dfs(File rootFile,String word,List<File> result) throws IOException {File[] files = rootFile.listFiles();if(files == null || files.length == 0) {return;}for(File file : files) {if(file.isDirectory()) {dfs(file,word,result);}else {if(checkContent(file,word) || checkName(file,word)) {result.add(file.getAbsoluteFile());}}}}public static boolean checkContent(File file,String word) throws IOException {StringBuilder sb = new StringBuilder();//用于高效地拼接文件内容try(InputStream is = new FileInputStream(file)) {//Scanner 用于逐行读取输入流中的内容。//这里指定了编码格式为 "UTF-8",表示文件内容是以 UTF-8 编码格式进行读取try(Scanner scanner = new Scanner(is,"UTF-8")) {while(scanner.hasNextLine()) {//判断文件中是否还有下一行内容。如果有,则进入循环,逐行读取文件。sb.append(scanner.nextLine());//scanner.nextLine()表示读取当前行的内容。sb.append("\r\n");//在每行内容后面追加一个换行符(\r\n),这是为了确保在拼接多行内容时每行之间能够保持换行。}}}// 检查 StringBuilder 对象 sb 中是否包含指定的 word 字符串。// indexOf(word) 方法会返回 word 在 sb 中首次出现的位置。如果 word 不在 sb 中,则返回 -1。return sb.indexOf(word) != -1;}public static boolean checkName(File file,String word) {//怎么判断文件名包含word关键字?if(file.getName().contains(word)) {return true;}return false;}
}
本篇博客到这里就结束啦, 感谢观看 ❤❤❤
🐎期待与你的下一次相遇😊😊😊
相关文章:
【文件操作与IO】详细解析文件操作与IO (二)
本篇博客是上一篇文章的续写,重点介绍数据流,还包括三道练习题. 🐎文章专栏: JavaEE初阶 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅🚀 要开心…...
【java实现+4种变体完整例子】排序算法中【基数排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格
基数排序详解及代码示例 基数排序原理 基数排序通过处理每一位数字进行排序,分为 LSD(最低位优先) 和 MSD(最高位优先) 两种方式。核心步骤: 确定最大值:计算数组中最大数的位数。逐位排序&am…...
Java中的函数式编程详解
Java中的函数式编程是一个在Java 8中引入的特性,它将计算视为数学函数的求值,避免使用可变状态和数据。其核心特性包括Lambda表达式、函数式接口和Stream API。以下将结合代码示例和具体场景详细讲解这些特性。 1. Lambda表达式 Lambda表达式是Java 8引…...
专精特新政策推动,B端UI设计如何赋能中小企业创新发展?
在当前数字化转型浪潮下,专精特新政策为中小企业提供了强大的支持,助力其在细分领域实现专业化、精细化、特色化和创新化发展。B端UI设计作为提升企业数字化产品用户体验和工作效率的重要手段,能够有效赋能中小企业创新发展。本文将探讨专精特…...
从零开始学A2A四:A2A 协议的高级应用与优化
A2A 协议的高级应用与优化 学习目标 掌握 A2A 高级功能 理解多用户支持机制掌握长期任务管理方法学习服务性能优化技巧 理解与 MCP 的差异 分析多智能体场景下的优势掌握不同场景的选择策略 第一部分:多用户支持机制 1. 用户隔离架构 #mermaid-svg-6SCFaVO4oDU…...
海关总署广东:广东外贸一季度进出口2.14万亿元 同期增长4.2%
大湾区经济网湾区财经报道,据海关总署广东分署统计,今年一季度,广东外贸进出口2.14万亿元,较去年同期(下同)增长4.2%,增速高于全国2.9个百分点。其中,出口1.34万亿元,增长…...
C++代码优化
前段时间写了一些代码,但是在运算过程中发现有些代码可以进行改进以提高运行效率,尤其是与PCL相关的部分,可以进行大幅度提高.特意在此进行记录,分享给大家,也供自己查看. pcl::PointCloud< …...
Manim教程:第七章 坐标系统
#什么是坐标系统?特点是什么? 坐标系统是一个用于确定空间中点位置的数学工具。它通过一组数值(坐标)来描述一个点在某个空间中的位置。不同类型的坐标系统可以用于不同的应用场景,最常见的包括: 笛卡尔坐标系:使用直角坐标系,通常用坐标轴(如x轴和y轴)来表示二维空间…...
U盘实现——双盘符实现
文章目录 双盘符实现描述符类特殊命名get max luninquiry上一篇文章中介绍了 U 盘的枚举过程 U盘实现——U 盘枚举过程 双盘符实现 描述符 双盘符的时候中,描述符的实现与上节完全一致,不同的只有类特殊命令 设备描述符配置描述符接口描述符输出端点描述符输入端点描述符上…...
【Linux】【阿里云服务器】【树莓派】学习守护进程编程、gdb调试原理和内网穿透信息
目录 一. 守护进程的含义及编程实现的主要过程 1.1守护进程 1.2编程实现的主要过程 二、在树莓派中通过三种方式创建守护进程 2.1nohup命令创建 2.2fork()函数创建 2.3daemon()函数创建 三、在阿里云中通过三种方式创建守护进程 3.1nohup命令创建 3.2fork()函数创建 …...
2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(二级)答案 + 解析
青少年软件编程(Python)等级考试试卷(二级) 分数:100 题数:37 一、单选题(共25题,共50分) 1. 老师要求大家记住四大名著的作者,小明机智地想到了可以用字典进行记录,以下哪个选项的字典格式是正确?( ) A. [‘曹雪芹’:‘红楼梦’, ‘吴承恩’:‘西游记’, ‘罗贯…...
【Linux系统篇】:System V IPC核心技术解析---从共享内存到消息队列与信号量
✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:c篇–CSDN博客 文章目录 一.System V共享内存(重点)1.基本概念和原理…...
关于GPU的涡轮散热与被动散热
显卡涡轮散热与被动散热的深度解析 一、涡轮散热的定义与工作原理 涡轮散热技术是通过高速旋转的涡轮风扇配合封闭式风道设计,将冷空气吸入并强制排出热量的主动散热方案。其核心原理包含以下关键点: 气流动力学设计:涡轮风扇采用精密叶片(如离心式结构),在相同尺寸下能…...
namesapce、cgroup
dd: 制作磁盘镜像:借助 dd 指令能够把整个磁盘或者分区的数据复制到一个文件里,形成磁盘镜像文件。此镜像文件可用于备份数据或者在其他系统中恢复磁盘。 恢复磁盘镜像:可以把之前创建的磁盘镜像文件恢复到磁盘或者分区 磁盘初始…...
C++23 新特性:行拼接前去除空白符 (P2223R2)
文章目录 1\. 什么是行拼接前去除空白符2\. 为什么需要这一特性3\. 示例代码输出结果 4\. 编译器支持5\. 优势与应用场景5.1 提高代码可读性5.2 减少潜在错误5.3 适用于多行字符串 6\. 其他相关特性7\. 总结 C 语言一直在不断进化,以满足现代软件开发的需求。C23 标…...
算法思想之链表
欢迎拜访:雾里看山-CSDN博客 本篇主题:算法思想之链表 发布时间:2025.4.18 隶属专栏:算法 目录 算法介绍常用技巧 例题两数相加题目链接题目描述算法思路代码实现 两两交换链表中的节点题目链接题目描述算法思路代码实现 重排链表…...
《软件设计师》复习笔记(11.5)——测试原则、阶段、测试用例设计、调试
目录 1. 测试基础概念 2. 测试方法分类 3. 测试阶段 真题示例: 题目1 题目2 题目3 4. 测试策略 5. 测试用例设计 真题示例: 6. 调试与度量 真题示例: 1. 测试基础概念 定义:系统测试是为发现错误而执行程序的过程&…...
工厂方法模式详解及在自动驾驶场景代码示例(c++代码实现)
模式定义 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,通过定义抽象工厂接口将对象创建过程延迟到子类实现,实现对象创建与使用的解耦。该模式特别适合需要动态扩展产品类型的场景。 自动驾驶感知场景分析 自动驾…...
Java 2025:解锁未来5大技术趋势,Kotlin融合AI新篇
各位Java开发者们好!🚀 2025年的Java世界正在经历一场前所未有的技术变革。作为深耕Java领域多年的技术博主,今天我将带大家深入探索Java生态即将迎来的5大技术趋势,特别是Kotlin的深度融合和AI技术的新篇章。准备好了吗ÿ…...
抗辐照设计优化:商业航天高可靠系统设计的关键路径
随着商业航天领域的快速发展,航天器的可靠性和抗辐照能力已成为系统设计的核心需求。在严苛的太空辐射环境中,电子设备面临着单粒子效应、总剂量效应和位移损伤效应等多重挑战。抗辐照设计优化不仅是确保航天器任务成功的关键路径,更是推动商…...
颚式破碎机的设计
一、引言 颚式破碎机作为矿山、建材等行业的重要破碎设备,其性能优劣直接影响物料破碎效率与质量。随着工业生产规模的扩大和对破碎效率要求的提高,设计一款高效、稳定、节能的颚式破碎机具有重要意义。 二、设计需求分析 处理能力:根据目…...
1panel第三方应用商店(本地商店)配置和使用
文章目录 引言资源网站实战操作说明 引言 1Panel 提供了一个应用提交开发环境,开发者可以通过提交应用的方式将自己的应用推送到 1Panel 的应用商店中,供其他用户使用。由此衍生了一种本地应用商店的概念,用户可以自行编写应用配置并上传到自…...
ObjectOutputStream 深度解析
ObjectOutputStream 深度解析 ObjectOutputStream 是 Java IO 体系中的一个关键类,用于序列化(将对象转换为字节流),通常与 ObjectInputStream 配合使用,实现对象的持久化存储或网络传输。 1.作用:完成对象的序列化过程 2.它可以将JVM当中的Java对象序列化到文件中/网…...
如何学习和研究量子计算与量子计算机:从理论到实践的完整路径
量子计算作为量子力学与计算机科学的交叉领域,正在迅速改变我们对计算能力的认知。无论是破解经典加密算法,还是加速药物分子模拟,量子计算都展现出巨大的潜力。然而,学习这一领域需要系统化的理论知识和实践能力。以下是基于最新…...
数据结构学习笔记 :二叉搜索树与高效查找算法详解
目录 二叉搜索树(BST)实现 1.1 顺序存储实现 1.2 链式存储实现查找算法 2.1 顺序查找 2.2 折半查找 2.3 哈希查找总结与应用场景代码示例与完整实现 一、二叉搜索树(BST)实现 1. 顺序存储实现 BST的顺序存储基于完全二叉树的特…...
广搜bfs-P1443 马的遍历
P1443 马的遍历 题目来源-洛谷 题意 要求马到达棋盘上任意一个点最少要走几步 思路 国际棋盘规则是马的走法是-日字形,也称走马日,即x,y一个是走两步,一个是一步 要求最小步数,所以考虑第一次遍历到的点即为最小步数ÿ…...
Ubuntu22.04安装QT、px4安装环境
Ubuntu22.04安装QGC编译环境、QT、px4编译环境 安装QGC安装Ubuntu安装QT配置px4安装环境出现错误怎么办 安装QGC 我使用的是pixhawk V5飞控,在QGC4.4 Guide里,说 安装Ubuntu 直接去清华源里将Ubuntu镜像下载下来(网址:清华源下…...
【IDEA2020】 解决开发时遇到的一些问题
目录 一、批量更新数据库数据 逐条更新 Db.updateEntitiesBatch() 二、Error running,Command line is too long. Shorten command line 报错场景 报错分析 解决方法 一、批量更新数据库数据 逐条更新 List<UserModel> ums userMapper.selectListBy…...
基于autoware1.14的实车部署激光雷达循迹,从建图、定位、录制轨迹巡航点、到实车运行。
1.首先安装autoware ,大家可以以下一下博客进行安装,如果缺少库什么的直接问ai安装对应的库就行。ubuntu18.04安装Autoware1.14---GPU版 最全环境配置说明_autoware1.14安装教程-CSDN博客 安装成功后运行: source install/setup.bash roslau…...
抽象类和接口的区别
1. 定义 抽象类:用于描述一类事物的共性接口:用于描述行为。 2. 方法和变量 抽象类: 可以有普通方法和抽象方法。可以有普通成员变量和静态常量。 接口: JDK 8之前只支持抽象方法,JDK 8后支持默认方法和静态方法…...
自注意力机制self-attention
目录 简介: 输入和输出方式: Sequence Labeling: self-attention运作方式: 一:怎么从vector得到b1 二:利用矩阵的方法怎么得到 Multi-head Self-attention: positional encoding&#x…...
《Operating System Concepts》阅读笔记:p735-p737
《Operating System Concepts》学习第 62 天,p735-p737 总结,总计 3 页。 一、技术总结 1.distributed system (1)定义 A collection of loosely coupled nodes interconnected by a communication network(一组通过通信网络相互连接的松散耦合节点)…...
2025-04-19 Python 强类型编程
文章目录 1 方法标注1.1 参数与返回值1.2 变参类型1.3 函数类型 2 数据类型2.1 内置类型2.2 复杂数据结构2.3 类别选择2.4 泛型 3 标注方式3.1 注释标注3.2 文件标注 4 特殊情形4.1 前置引用4.2 函数标注扩展4.3 协变与逆变4.4 dataclass 5 高级内容5.1 接口5.2 泛型的协变/逆变…...
RVOS的任务调度优化
12.系统优化–任务调度 12.1 改进任务管理功能 在原有基础上进⼀步改进任务管理功能。具体要求:改进 task_create(),提供更多的参数,具体改进后的函数如下所⽰: int task_create(void (*task)(void* param),void *param, uint8…...
【论文阅读20】-CNN-Attention-BiGRU-滑坡预测(2025-03)
这篇论文主要探讨了基于深度学习的滑坡位移预测模型,结合了MT-InSAR(多时相合成孔径雷达干涉测量)观测数据,提出了一种具有可解释性的滑坡位移预测方法。 [1] Zhou C, Ye M, Xia Z, et al. An interpretable attention-based deep…...
图像预处理-图像噪点消除
一.基本介绍 噪声:指图像中的一些干扰因素,也可以理解为有那么一些点的像素值与周围的像素值格格不入。常见的噪声类型包括高斯噪声和椒盐噪声。 滤波器:也可以叫做卷积核 - 低通滤波器是模糊,高通滤波器是锐化 - 低通滤波器就…...
PP-OCR的安卓端部署
EMO了几天 我浪费了几天的生命,去研究PP-OCR的模型微调、从训练模型导出预测模型,结果一个坑接着一个坑,没有善终。 找了好多资料,得到一些负面信息,比如说飞浆的团队修复问题不及时啦,代码仓库有好多年不…...
2048小游戏C++板来啦!
个人主页:PingdiGuo_guo 收录专栏:C干货专栏 大家好呀,我是PingdiGuo_guo,今天我们来学习如何用C编写一个2048小游戏。 文章目录 1.2048的规则 2.步骤实现 2.1: 初始化游戏界面 2.1.1知识点 2.1.2: 创建游戏界面 2.2: 随机…...
研0大模型学习(第四、五天)
学习CSDN教程:VSCode Debug指南 但里面貌似主要是针对nodejs的,所以我在 CSDN教程:VSCode调试python程序 中学习,刚开始调试报错python版本太低,于是我安装了旧版本的pythondebugger,再把python解释器从原…...
编程规范之整数运算
在表达式中混用有符号数和无符号数时,可能会因隐式转换而导致非预期的结果。因此应尽量在表达式中使用相同符号类型的 变量。 对于无法使用相同符号类型的场景,应将不同类型的变量显式转换为相同类型,当表达式中的无符号数隐式转换为另一个有…...
【零基础】基于 MATLAB + Gurobi + YALMIP 的优化建模与求解全流程指南
MATLAB Gurobi YALMIP 综合优化教程(进阶) 本教程系统介绍如何在 MATLAB 环境中使用 YALMIP 建模,并通过 Gurobi 求解器高效求解线性、整数及非线性优化问题。适用于工程、运营研究、能源系统等领域的高级优化建模需求。 一、工具概览 1.…...
C++17 信号量模拟实现
C17 信号量模拟实现 一、实现原理 C17 标准库没有原生信号量(C20才有),但可以通过 std::mutex std::condition_variable 模拟实现。以下是核心逻辑: #include <mutex> #include <condition_variable>class CountingSemaphore { private:…...
LINUX学习——守护进程的含义及编程实现
实验目的 理解守护进程的含义。掌握编程实现守护进程的主要步骤。 实验步骤 守护进程的含义: 守护进程是运行在后台的一种特殊进程,独立于控制终端,周期性地执行任务或等待处理事件。守护进程通常以 d 结尾,如 httpd、sshd 等。…...
Json 在线格式化 - 加菲工具
Json 在线格式化 打开网站 加菲工具 选择“Json 在线格式化” 或者直接进入 https://www.orcc.top/tools/json 输入Json,点击左上角的“格式化”按钮 得到格式化后的结果...
final关键字带来的问题
定义了一个配置类: public class EsignConfig { public static final String EsignOrgId "*****"; // 应用ID public static final String EsignAppId "*****"; // 应用密钥 public static final String EsignAppSecret…...
Flash存储器(一):接口标准全解析
目录 一.接口类型与协议标准 二.应用场景 Flash存储器的接口设计直接影响其性能、应用场景及系统集成复杂度。以下从接口类型、协议标准及应用场景三个方面进行系统阐述。 一.接口类型与协议标准 Flash接口类型与协议标准 序号接口类型协议标准特点1并行接口…...
第18周:对于ResNeXt-50算法的思考
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 问题:在上一章代码中是ResNeXt-50的残差单元,问题:如果conv shortcutFalse那么在执行“xAdd0)…“语句时,通道数不一致的&…...
Django 结合 Vue 实现简单管理系统的详解
以下是一个 Django 结合 Vue 实现简单管理系统的详细步骤及示例代码: 项目整体架构思路 后端:使用 Django 搭建 RESTful API,负责数据的存储和处理。前端:使用 Vue 构建用户界面,通过调用后端 API 实现数据的展示、添加、修改和删除等操作。步骤 1:创建 Django 项目和应…...
ValueError: model.embed_tokens.weight doesn‘t have any device set
ValueError: model.embed_tokens.weight doesn’t have any device set model.embed_tokens.weight 通常在深度学习框架(如 PyTorch)中使用,一般是在处理自然语言处理(NLP)任务时,用于指代模型中词嵌入层(Embedding layer)的权重参数。下面详细解释: 词嵌入层的作用 …...
公务员行测之速算分数记忆检验-无答案版本
前言 这一篇是根据百分数,默写分数,我发现我看见百分数有点想不到分数 速算之百分数记忆检验 50 % \ 50\% 50% 33.3 % \ 33.3\% 33.3% 25 % \ 25\% 25% 20 % \ 20\% 20% 16.7 % \ 16.7\% 16.7% 14.3 % \ 14.3\% 14.3% 12.5 % \ 12.5\% 1…...