【Java ee 初阶】文件IO和操作(下)
书接上文
文本操作的方法
String[] | list() | 返回 File 对象代表的目录下的所有文件名 |
File[] | listFiles() | 返回 File 对象代表的目录下的所有文件,以 File 对象表示 |
此处是针对File对象打印得到的效果(调用了File的toString)
boolean | mkdir() | 创建 File 对象代表的目录 |
boolean | mkdirs() | 创建 File 对象代表的目录,如果必要,会创建中间目录 |
前者只能创建一层目录,后者可以一次性创建多层目录
boolean | renameTo(File dest) | 进行文件改名,也可以视为我们平时的剪切、粘贴操作 |
不光能重命名,还能够移动位置
文件内容操作
读文件:硬盘的数据读到内存中去
写文件:把内存的数据写到硬盘里
我们通过流对象进行文件内容操作
Java通过一系列的类来表示“流对象”,一般分成两个大类
1.字节流:读写数据的时候,以字节为基本单位,一次最少读写一个字节。读写二进制文件的是偶,通常使用字节流
InputStream 读
OutputStream 写
2.字符流:读写数据的时候,以字符为基本单位,一次最少读写一个字符(一个字符可能对应多个字节),看编码方式。读写文本文件,通常使用字符流。
Reader 读
Writer 写
在IO操作过程中,输入输出指的是以CPU为基准来进行考虑的,从硬盘读取内容到内存中去,再从内存中读取内容放到CPU中。
*C语言中的“字符流”本质上是“字节流”,C语言没有“Java的字符的概念”,本身没有处理UTF-8,GBK等编码的能力,压根处理不了中文。C++也一样。
是一个抽象类,因此不能直接创建实例
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;public class demo6 {public static void main(String[] args) throws Exception {// 创建文件,这个过程,对应到操作系统中,称为“打开文件”InputStream inputStream = new FileInputStream("d:/test.txt");while(true){int c = inputStream.read(); // 读取一个字节,对应到操作系统中,称为“读取文件”if(c == -1){ // 读取到文件末尾,返回 -1break; // 跳出循环}System.out.printf("0x%x\n",c);}}}
对照ASCII表:ASCII码对照表,ASCII码一览表(非常详细) - C语言中文网
操作系统中,流这个概念,不仅仅是能够搭配文件使用的,还有其他的用途(例如搭配网络进行使用)
站在操作系统的视角,如果想要读写文件,需要先打开文件。
无参数版本,一次只能读取一个字节
一个参数版本,尝试把这个参数中的字节数组给填满
三个参数版本,也是尝试把数据放到b字节数组中,而不是从头开始放,是从offset的下标开始最多填充len个,只使用了数组的一部分
若test里面存放的是“你好”
第二种写法:
此处的buffer参数,称为“输出型参数”。实现构造好一个空的数组,不是null,而是里面的元素全为0的数组,由read方法内部,往参数数组中进行填充。n表示实际读到的有效字节数。
一个方法可以看成是一个“工厂”,参数是“原材料”,返回值就是“产品”。
Java中一个方法,只能返回一个值,如果需要返回多个值,要么借助输出型参数,要么把返回的多个值打包成一个类。一个方法返回多个值,很多语言多支持,Pyhthon,Go......这种语法就完全不需要输出型参数。
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;public class demo7 {public static void main(String[] args) throws IOException {InputStream file = new FileInputStream("d:/test.txt");byte[] buffer = new byte[1024]; // 缓冲区,用于存储读取到的字节while (true) {int n = file.read(buffer);if (n == -1) { // 读取到文件末尾,返回 -1break; // 跳出循环}for (int i = 0; i < n; i++) { // 循环 n 次,输出缓冲区中的字节System.out.printf("0x%x\n", buffer[i]); // 输出字节的十六进制表示}}}
}
内存泄漏
内存泄漏问题:内存申请了之后,没有释放,可用内存越来越少,后序内存都申请不了了。对于Java来说,JVM存在垃圾回收机制,能够自动的把不适用更大内存全部释放掉。
文件资源,也会涉及到“泄漏”
进程PCB中有一个属性,文件描述符表(这是一个顺序表),每次打开一个文件,就会再找个表里插入一个元素。问年间描述符表,长度是定长的(无法自动扩容)。光打开文件,不关闭文件,此时就会逐渐把找个表里的内容消耗殆尽,后序再尝试打开,就会打开失败。
进行修复之后
此时代码并不美观
继续修改得到:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;public class demo8 {public static void readFile() throws IOException{//利用try-with-resources自动关闭流try(InputStream inputStream = new FileInputStream("d:/test.txt")){byte[] buffer = new byte[1024]; // 缓冲区,用于存储读取到的字节while (true) {int n = inputStream.read(buffer); // 读取文件内容到缓冲区if (n == -1) { // 读取到文件末尾,返回 -1break; // 跳出循环} for (int i = 0; i < n; i++) { // 循环 n 次,输出缓冲区中的字节System.out.printf("0x%x\n", buffer[i]); // 输出字节的十六进制表示}}}catch(IOException e) {e.printStackTrace(); // 打印异常信息}
写文件OutputStream
写一个字节
写一个字节数组
写字节数组的一个部分
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;public class demo9 {public static void writeFile() {try (OutputStream os = new FileOutputStream("d:/test.txt")) {os.write(97);os.write(98);os.write(99);os.write(100);} catch (IOException e) {e.printStackTrace(); // TODO: handle exception}// TODO Auto-generated method stub} public static void main(String[] args) {writeFile();}}
每一次写,都将原来的文本内容清空重新开始写
加上append这个参数,表示“追加写”,不会清空原有内容,新写入的内容就会从文件末尾继续追加。
文件读取
一次性只读取一个字符,-1表示结束
一次性读取若干个字符,填充到char[],返回实际读到的字符个数
一次性读取若干个字符,填充到 char[] 的一部分
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;public class demo10 {public static void main(String[] args) throws FileNotFoundException {try(Reader reader = new FileReader("d:/test.txt")){while(true){int ch = reader.read();if(ch == -1){break;}char c = (char)ch; // 强制类型转换,将 int 类型转换为 char 类型System.out.print(c); // 输出字符}} catch (IOException e) {e.printStackTrace(); // 打印异常栈信息,方便调试 // TODO: handle exception}}}
write写文件操作
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;public class demo11 {public static void main(String[] args) {try(Writer writer = new FileWriter("d:/test.txt",true)){ // 追加模式,true 表示追加到文件末尾,false 表示覆盖原文件内容writer.write("Hello, World!"); // 写入字符串到文件} catch (IOException e) {e.printStackTrace();// TODO: handle exception}}}
三个应用题
扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件
import java.io.File;
import java.util.Scanner;public class demo12 {public static void main(String[] args) {//1.让用户输入要查询的文件名Scanner scanner = new Scanner(System.in);System.out.println("请输入要搜索的目录:");String dirPath = scanner.next();System.out.println("请输入要查询的文件名:");String fileName = scanner.next();//2.判定目录是否存在File dir = new File(dirPath);if(!dir.isDirectory()){System.out.println("目录不存在");return; // 终止程序}//3.进行搜索,递归的遍历目录中所有的文件和子目录searchFile(dir,fileName); // 调用递归方法进行搜索}private static void searchFile(File dir, String fileName) {// 1.获取目录中的所有文件和子目录File[] files = dir.listFiles(); // 获取目录中的所有文件和子目录if(files == null){ // 如果目录为空,直接返回return; // 终止递归}//2.遍历files数组,判定每个元素的类型for(File file : files){ // 遍历files数组,判定每个元素的类型if(file.isDirectory()){ // 如果是目录,递归调用searchFile方法searchFile(file,fileName); // 递归调用searchFile方法}else{ // 如果是文件,判断文件名是否包含要查询的字符串if(file.getName().contains(fileName)){ //如果找到了,那么就要尝试删除trydelete(file); // 调用trydelete方法进行删除}}}}private static void trydelete(File file) { System.out.println("准备删除文件:"+file.getAbsolutePath());Scanner scanner = new Scanner(System.in); // 创建Scanner对象,用于读取用户输入System.out.println("是否要删除文件:" + file.getAbsolutePath() + "?(y/n)"); // 打印提示信息String choice = scanner.next(); // 读取用户输入的字符串if(choice.equals("y")){file.delete();System.out.println("文件删除成功");}
}}
进行普通文件的复制
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Scanner;public class demo13 {//进行普通文件的复制public static void main(String[] args) throws Exception {//1.输入源文件目录和目标文件目录Scanner scanner = new Scanner(System.in);System.out.println("请输入源文件目录:");String src = scanner.next();System.out.println("请输入目标文件目录:");String dest = scanner.next();//2.判定源文件是否存在File srcFile = new File(src);if(!srcFile.exists()){System.out.println("源文件不存在");return; //结束程序}//3.判定目标文件的父目录是否存在,如果不存在,则创建File destFile = new File(dest);if(!destFile.getParentFile().exists()){ //如果目标文件的父目录不存在,则创建return;}//4.进行文件的复制copy(srcFile,destFile);}//进行文件的复制public static void copy(File srcFile,File destFile) throws Exception {try(InputStream inputStream = new FileInputStream(srcFile); OutputStream outputStream =new FileOutputStream(destFile)) {while(true){ //循环读取文件内容,直到文件末尾byte[] buffer = new byte[1024]; //创建一个缓冲区,用于存储读取到的文件内容int len = inputStream.read(buffer); //读取文件内容到缓冲区中,返回读取到的字节数if(len == -1){ //如果读取到的字节数为-1,则表示文件末尾break; //结束循环}outputStream.write(buffer,0,len); //将读取到的文件内容写入到目标文件中,从缓冲区的0位置开始,写入len个字节} } catch (IOException e) {e.printStackTrace(); // TODO: handle exception}}}
相关文章:
【Java ee 初阶】文件IO和操作(下)
书接上文 文本操作的方法 String[] list() 返回 File 对象代表的目录下的所有文件名 File[] listFiles() 返回 File 对象代表的目录下的所有文件,以 File 对象表示 此处是针对File对象打印得到的效果(调用了File的toString) boolean …...
Android7 Input(六)InputChannel
概述: 本文讲述Android Input输入框架中 InputChannel的功能。从前面的讲述,我们知道input系统服务最终将输入事件写入了InputChannel,而input属于system_server进程,App属于另外一个进程,当Input系统服务想要把事件传递给App进行…...
【Java ee初阶】初始网络
一、IP地址 概念 IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址。 就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。 格式 IP…...
LabVIEW 2019 与 NI VISA 20.0 安装及报错处理
在使用 Windows 11 操作系统的电脑上,同时安装了 LabVIEW 2019 32 位和 64 位版本的软件。此前安装的 NI VISA 2024 Q1 版,该版本与 LabVIEW 2019 32 位和 64 位不兼容,之后重新安装了 NI VISA 20.0。从说明书来看,NI VISA 20.0 …...
http协议理解
文章目录 http协议理解基本概念HTTP版本演变版本编年史版本对比未来趋势 HTTP请求/响应结构请求报文响应报文HTTP方法分类对比方法选择原则必须遵守的约束 常见状态码HTTP头部字段HTTPSHTTPS 核心功能说明HTTPS 如何工作? HTTP特点补充知识点启用HTTP/2Nginx 中配置…...
typecho中的Widget设计文档
组成系统的最基本元素 什么是Widget Widget是组成Typecho的最基本元素,除了已经抽象出来的类库外,其它几乎所有的功能都会通过Widget来完成。在实践中我们发现,在博客这种小型但很灵活的系统中实施一些大型框架的思想是不合适的,…...
使用ESPHome烧录固件到ESP32-C3并接入HomeAssistant
文章目录 一、安装ESPHome二、配置ESP32-C3控制灯1.主配置文件esp32c3-luat.yaml2.基础通用配置base.yaml3.密码文件secret.yaml4.围栏灯four_light.yaml5.彩灯rgb_light.yaml6.左右柱灯left_right_light.yaml 三、安装固件四、HomeAssistant配置ESPHome1.直接访问2.配置ESPHom…...
基于STM32、HAL库的CH340N USB转UART收发器 驱动程序设计
一、简介: CH340N是南京沁恒电子生产的一款USB转串口芯片,具有以下特点: 支持USB 2.0全速(12Mbps) 内置时钟,无需外部晶振 支持5V和3.3V电源电压 提供常用的MODEM联络信号 内置上电复位电路 支持Windows/Linux/Mac OSX等多平台驱动 体积小,SOP-8封装 二、硬件接口: CH…...
Spring Boot Controller 如何处理HTTP请求体
Spring Boot (通过Spring MVC) 提供了强大的机制来处理不同 Content-Type 的HTTP请求体。这主要依赖于 HttpMessageConverter 接口的各种实现,它们能够自动将请求体内容转换成Java方法参数。 一、核心机制:HttpMessageConverter Spring MVC会根据…...
【deepseek教学应用】001:deepseek如何撰写教案并自动实现word排版
本文讲述利用deepseek如何撰写教案并自动实现word高效完美排版。 文章目录 一、访问deepseek官网二、输入教案关键词三、格式转换四、word进一步排版 一、访问deepseek官网 官网:https://www.deepseek.com/ 进入主页后,点击【开始对话】,如…...
【Spring Boot 多模块项目】@MapperScan失效、MapperScannerConfigurer 报错终极解决方案
在使用 Spring Boot 构建多模块项目,集成 MyBatis-Plus 时,很多开发者会遇到类似如下启动报错: Error creating bean with name mapperScannerConfigurer ... Caused by: java.lang.IllegalArgumentException: Property basePackage is requ…...
vue 中如何使用region?
vue 中如何使用region? 在 Vue 文件中,你可以使用 //#region 和 //#endregion 注释来创建可折叠的代码区块(类似于 C# 的 region)。这可以显著提高大型 Vue 组件的可读性。 1. 基本用法 在 <script> 部分使用 <script&…...
Spring Boot 启动原理的核心机制
一、核心启动流程概览 Spring Boot 的启动流程可概括为 7 个关键阶段: 1. 加载启动类 (Main Class) 2. 初始化 SpringApplication 实例 3. 加载配置 & 准备环境 (Environment) 4. 创建 ApplicationContext(容器) 5. 刷新容器&#…...
【每天学习一点点】使用Python的pathlib模块分割文件路径
使用Python的pathlib模块分割文件路径 pathlib模块(Python 3.4)提供了面向对象的文件系统路径操作方式,比传统的os.path更加直观和易用。以下是使用pathlib分割文件路径的几种方法: 基本路径分割 from pathlib import Path# 创…...
Qt/C++面试【速通笔记八】—Qt的事件处理机制
在Qt中,事件处理机制是应用程序与用户或系统交互的核心。通过事件处理,Qt能够响应用户的输入、窗口的变化、定时器的触发等各种情况。 1. 事件循环(Event Loop) 在Qt应用程序中,事件循环是事件处理机制的基础。事件循…...
uniapp自定义步骤条(可二开进行调试)
前言 有一个业务需求是需要一个步骤条,但是发现开源的都不太合适,所以就自己写了一个。 开始 test.vue <template><view class"authenticateRecordDetails_container"><!-- 进度 --><view class"authenticateSte…...
uniapp|实现多终端聊天对话组件、表情选择、消息发送
基于UniApp框架,实现跨平台多终端适配的聊天对话组件开发、表情选择交互设计及消息发送,支持文本与表情混合渲染。 目录 聊天界面静态组件实现消息列表布局消息气泡双向布局辅助元素定位与样式静态数据模拟与扩展性设计表情选择器静态模块浮层实现符号网格排列多端样式适配方…...
1.3.1 Linux音频框架alsa详细介绍
ALSA作为对旧OSS系统的替代方案,始于1998年。当时OSS还闭源商业化,因此社区开始开发开源的ALSA。经过多年的发展,ALSA成为Linux内核中音频架构的标准。 结构和架构 ALSA由以下几个主要部分组成: 内核模块: 这是ALSA的…...
R 语言机器学习:为遥感数据处理开启新视角
技术点目录 基础理论、机器学习与数据准备建模与空间预测实践案例与项目了解更多 ——————————————————————————————————————————— 前言综述 在当今科技快速发展的时代,遥感技术为生态学研究提供了海量的数据资源…...
深度 |提“智”向新,奔向未来——当前机器人产业观察
机器人踏着“猫步”在T台走秀、进入工厂协助造车,教育、医疗、城市管理等领域都有了机器人的帮助……今天,机器人已得到广泛应用,走进你我的生活。 伴随着技术日新月异,机器人产业加快提“智”向新。特别是今年以来…...
Web开发-JavaEE应用SpringBoot栈ActuatorSwaggerHeapDump提取自动化
知识点: 1、安全开发-JavaEE-常见依赖-Actuator&Swagger 2、安全开发-JavaEE-安全问题-配置安全&接口测试 一、演示案例-WEB开发-JavaEE-监控依赖-SpringBoot&Actuator&配置安全 SpringBoot Actuator模块提供了生产级别的功能,比如健康…...
AI Agent开发之门:微软官方课程全面解析
AI Agent开发之门:微软官方课程全面解析 引言项目概览10 节核心课程内容详解1. AI 代理简介及应用场景2. 探索 AI Agentic 框架3. 理解 AI Agentic 设计模式4. 工具使用设计模式5. Agentic RAG(检索增强生成)6. 构建可信赖的 AI Agents7. 规划…...
Unity-Shader详解-其五
关于Unity的Shader部分的基础知识其实已经讲解得差不多了,今天我们来一些实例分享: 溶解 效果如下: 代码如下: Shader "Chapter8/chapter8_1" {Properties{// 定义属性[NoScaleOffset]_Albedo("Albedo", 2…...
从零打造个人博客静态页面与TodoList应用:前端开发实战指南
前言 在当今数字时代,拥有个人博客和高效的任务管理工具已成为开发者展示自我和提升生产力的标配。本文将带你从零开始,通过纯前端技术实现一个兼具个人博客静态页面和TodoList任务管理功能的综合应用。无论你是前端新手还是希望巩固基础的中级开发者&a…...
开发者如何优雅应对HTTPS抓包难题
开发者如何优雅应对HTTPS抓包难题:工具实战 深度解析 调试HTTPS接口这件事,真是程序员永远的痛。特别是在移动端、或者遇到客户端集成了第三方安全SDK的项目时,网络调试的门槛几乎成倍提升。你可能也遇到过:Charles不识别证书、…...
Ubuntu 安装远程桌面连接RDP方式
1. 安装 XFCE4 桌面环境 如果你的 Ubuntu 系统默认使用 GNOME 或其它桌面环境,可以安装轻量级的 XFCE4: sudo apt update sudo apt install xfce4 xfce4-goodies 说明:xfce4-goodies 包含额外的插件和工具(如面板插件、终端等&a…...
Ubuntu 22.04 出现 ‘Temporary failure resolving‘ 解决方案
a、使用apt 安装 resolvconf sudo apt-get install resolvconf b、使用 cd /etc/resolvconf/resolv.conf.d/ 进入文件夹,使用 ls 查看目录,会显示 base head tail c、使用 sudo vim base 编辑base文件, 进入时为空,添加 name…...
ubuntu 22.04 换源
参考:清华大学开源软件镜像站 ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror...
Java并发编程几个问题的解答
目录 1、以前你编写的Java程序同时能做几件事情?有几个执行流程?main方法执行完,整个程序一定会退出吗?2、早期的电脑一般是单核CPU,但那时我们就可以在编写程序的同时听歌,你觉得其CPU可以同时执行两个程序…...
JavaScript中数组和对象不同遍历方法的顺序规则
在JavaScript中,不同遍历方法的顺序规则和适用场景存在显著差异。以下是主要方法的遍历顺序总结: 一、数组遍历方法 for循环 • 严格按数组索引顺序遍历(0 → length-1) • 支持break和continue中断循环 • 性能最优,…...
C++ STL入门:set 集合容器
C STL入门:set 集合容器 一、核心特性与适用场景 set 是 C STL 提供的关联式容器,基于红黑树实现,具有两大核心特性: 特性表现形式底层原理元素唯一性重复值自动去重插入时进行二叉树键比对自动排序元素默认升序排列红黑树中序遍…...
[论文笔记] 超详细解读DeepSeek v3全论文技术报告
DeepSeek-V3是一个强大的专家混合(Mixture-of-Experts,MoE)语言模型,总共671B参数,每个token激活37B参数(可以理解为有多个专家,但每个token只会选择一部分专家进行推理,所以一个token的预测,只会用到37B参数),DeepSeek-V3 使用了 多头潜在注意力(...
JS 问号(?)运算符避免中间报错
一、场景 在前端开发过程中,有一些情况比如某些属性可能由于渲染数据的时机不同,一开始是null 或者undifine, 这样访问下面的属性的时候就会报错,我们可以给每个层级后面加个? 就可以避免这个错误。 let data {user: {profile: {name: &q…...
4:点云处理—去噪、剪切、调平
1.点云去噪 dev_clear_window ()dev_open_window(0, 0, 560, 560, black, WindowHandle)GenParamNames : [lut,intensity,light_position,disp_pose,alpha]GenParamValues : [color1,coord_z,0.0 0.0 -0.3 1.0,true,1]DispPose : [0,-0.0005,717.04,280,0,20,0]Instructions[0]…...
机器学习实操 第二部分 神经网路和深度学习 第17章 编码器、生成对抗网络和扩散模型
机器学习实操 第二部分 神经网路和深度学习 第17章 编码器、生成对抗网络和扩散模型 内容概要 第17章深入探讨了自编码器(Autoencoders)、生成对抗网络(GANs)和扩散模型(Diffusion Models)。这些模型能够…...
【今日三题】ISBN号码(模拟) / kotori和迷宫(BFS最短路) / 矩阵最长递增路径(dfs)
⭐️个人主页:小羊 ⭐️所属专栏:每日两三题 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 ISBN号码(模拟)kotori和迷宫(BFS最短路)矩阵最长递增路径(dfs) ISBN号码(模拟) ISBN号码 #include <iostream> #incl…...
【记录】HunyuanVideo 文生视频工作流
HunyuanVideo 文生视频工作流指南 概述 本指南详细介绍如何在ComfyUI中使用腾讯混元HunyuanVideo模型进行文本到视频生成的全流程操作,包含环境配置、模型安装和工作流使用说明。 参考:https://comfyui-wiki.com/zh/install/install-comfyui/install-c…...
DevExpressWinForms-布局之TablePanel
布局之TablePanel 在 DevExpress 的控件库中,TablePanel 是一个功能强大且灵活的布局控件,它能够以表格形式组织和排列其他控件,让界面布局更加规整、有序。无论是开发复杂的企业级应用程序,还是设计简洁美观的用户界面ÿ…...
MySQL 数据库初体验
目录 1.1 数据库简介 1.1.1 使用数据库的必要性 1.1.2 数据库的基本概念 1.数据 2.数据库和数据库表 3.数据库管理系统和数据库系统 1.1.3 数据库发展史 1.数据库系统发展史 (1)初级阶段——第一代数据库 (2)中级阶段—…...
flink超时未揽收单量统计
应用场景: 双十一大屏统计 - - 订单超时汇总 项目指标概况: 应用背景:晚点超时指标,例如:出库超6小时未揽收订单量 难点:flink消息触发式计算,没有消息到达则无法计算,而这类指标…...
【造包工具】【Xcap】精讲Xcap构造分片包(IPv4、ipv6、4G\5G等pcap均可),图解超赞超详细!!!
目录 前言 1. XCap工具概念介绍 2. Xcap环境说明 2.1 新建报文组 2.2 导入数据包 2.3 查看报文组 2.4 复制删除报文组 3. 构造分片包 3.1 造普通/外层分片步骤: 3.2 造内层分片步骤 3.2.1 建立一个新报文 3.2.2 将组装的新报文分片 3.2.3 替换原始包内层…...
RabbitMQ学习(第二天)
文章目录 1、生产者可靠性①、生产者重连②、生产者确认 2、MQ可靠性①、数据持久化②、LazyQueue(惰性队列) 3、消费者可靠性①、消费者确认②、失败重试机制③、保证业务幂等性 总结 之前的学习中,熟悉了java中搭建和操作RabbitMQ发送接收消息,熟悉使用…...
旧版 Flutter 写的项目, 想要在新的环境上运行?
DeepSeek 给出的最佳实践 以下是针对拷贝 Flutter 项目到新环境运行的 完整检查清单和最佳实践,覆盖了环境配置、版本兼容性、依赖管理等多个关键点: 📋 完整检查清单 检查项操作方式/命令重要性1. Flutter SDK 版本flutter --version 对比…...
Flutter接入ProtoBuff和原生Android通信【性能最优】
Protocol Buffers(简称Protobuf)是由 Google 开发的一种结构化数据序列化框架,旨在实现高效的数据交换与存储。其核心特性及优势如下: 一、核心特性 跨语言与跨平台 支持多种编程语言(如 C、Java、Python、Dart …...
【MySQL】(10)用户和权限管理
一、应用场景 通常一个应用对应一个数据库,我们希望某个数据库只能被相关人员操纵,就需要创建用户并指定权限。只有登录该用户,才能在权限范围内操纵数据库。root 是权限最高的用户,它拥有所有的权限。 二、查询用户 在 mysql 数…...
学成在线之缓存
一:缓存 把白名单可以看到的信息和学生用户下的我的学习,我的选课等这些信息,存到缓存中,因为这些查询量比较大。 当查询时,先去检查缓存中是否有这个数据,如果有,就直接返回 如果没有&#…...
视频编解码学习8之视频历史
视频技术的发展历史可以追溯到19世纪,至今已跨越近200年。以下是视频技术发展的主要阶段和里程碑: 1. 早期探索阶段(19世纪-1920年代) 1832年:约瑟夫普拉托(Joseph Plateau)发明"费纳奇镜&…...
从装饰器出发,优雅处理 UI 自动化中的异常
二、装饰器核心原理:函数式编程的“语法糖” 在 UI 自动化测试的实际场景中,页面加载超时、元素定位失败、网络波动等异常问题频繁出现。传统的try-except嵌套方式虽然能捕获异常,但会导致业务代码与处理逻辑高度耦合,造成代码冗…...
华为首款鸿蒙电脑正式亮相
在2025年5月8日的鸿蒙电脑技术与生态沟通会上,华为终端BG平板与PC产品线总裁朱懂东发表演讲。鸿蒙办公将支持无缝协同(统一账户 / 多端同步)、智慧体验(鸿蒙 AI / 智慧交互)、融合生态(桌面生态 / 移动生态…...
森林生态学研究深度解析:R语言入门、生物多样性分析、机器学习建模与群落稳定性评估
在生态学研究中,森林生态系统的结构、功能与稳定性是核心研究内容之一。这些方面不仅关系到森林动态变化和物种多样性,还直接影响森林提供的生态服务功能及其应对环境变化的能力。森林生态系统的结构主要包括物种组成、树种多样性、树木的空间分布与密度…...