Apache Commons VFS(虚拟文件系统)使用详解

7T7Kgs.png

第1章:Apache Commons VFS简介

大家好,我是小黑,今天我们来聊聊Apache Commons VFS(虚拟文件系统)。想必很多朋友都听说过或者用过Apache Commons的其他库,但是VFS可能还有点陌生。那么,什么是Apache Commons VFS呢?简单来说,它是一个用于处理各种类型文件系统的Java库。不管是本地文件系统、网络文件系统,还是云存储,用VFS都能轻松搞定。

你可能会问,为啥需要用虚拟文件系统呢?其实,随着互联网技术的发展,我们不再仅仅局限于本地文件系统,经常需要处理存储在网络上的文件。比如说,你可能需要从FTP服务器下载文件,或者上传文件到云存储。如果每种文件系统都用一套API来处理,那代码岂不是要乱成一锅粥?这时候,VFS就派上用场了,它提供了一套统一的API,让你无论对哪种文件系统的操作都能游刃有余。

再来说说Apache Commons VFS的特点。首先,它支持多种文件系统,例如本地文件、CIFS、FTP、FTPS、SFTP等等。其次,它的使用方式很灵活,可以很容易地集成到你的Java项目中。而且,VFS还很关注性能和稳定性,这在处理大量文件或大型项目时尤为重要。

第2章:依赖和基础配置

好,现在咱们来看看如何在项目中引入Apache Commons VFS。首先,确保你的项目是一个Java项目,使用的是Maven或者Gradle作为构建工具。这里以Maven为例。打开你的pom.xml文件,添加以下依赖:

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-vfs2</artifactId><version>2.8.0</version> <!-- 这里的版本号要根据最新版调整 -->
</dependency>

接下来,我们来配置一个简单的示例环境。比如说,咱们想要读取一个本地文件。首先,创建一个Java类,然后在这个类里面使用VFS的API来实现这个功能。这里先给大家看个基本的框架:

import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemManager;
import org.apache.commons.vfs2.VFS;public class VfsDemo {public static void main(String[] args) {try {// 创建FileSystemManagerFileSystemManager fsManager = VFS.getManager();// 使用VFS解析文件FileObject file = fsManager.resolveFile("file:///path/to/your/file.txt");// 接下来就可以进行文件操作了,比如读取文件内容// ...(这里会在后续章节详细展开)} catch (Exception e) {e.printStackTrace();}}
}

在这个代码示例中,FileSystemManager是VFS中的核心类,负责管理各种文件系统。通过VFS.getManager()方法可以获得它的实例。resolveFile方法用于解析文件路径,这里的路径是以file://开头的,代表一个本地文件路径。

第3章:文件系统操作基础

读取文件内容

读取文件是日常开发中最常见的操作之一。用VFS来读取文件,步骤简单,让我来给大家演示一下:

import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemManager;
import org.apache.commons.vfs2.VFS;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.io.BufferedReader;
import java.io.InputStreamReader;public class ReadFileExample {public static void main(String[] args) {try {FileSystemManager fsManager = VFS.getManager();// 这里替换成你的文件路径FileObject file = fsManager.resolveFile("file:///path/to/your/file.txt");// 打开文件输入流try (InputStream is = file.getContent().getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) {String line;while ((line = reader.readLine()) != null) {System.out.println(line); // 打印文件内容}}} catch (Exception e) {e.printStackTrace();}}
}

在这个例子里,小黑先是通过FileSystemManager获取了文件对象FileObject。然后,使用getInputStream方法打开文件输入流,接着就是标准的Java读文件流程了。

写入文件内容

写文件也是小菜一碟。看看下面这个例子,我用VFS写文件就像写日记一样简单:

import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemManager;
import org.apache.commons.vfs2.VFS;
import java.io.OutputStream;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;public class WriteFileExample {public static void main(String[] args) {try {FileSystemManager fsManager = VFS.getManager();// 这里替换成你的文件路径FileObject file = fsManager.resolveFile("file:///path/to/your/file.txt");// 确保文件存在if (!file.exists()) {file.createFile();}// 打开文件输出流try (OutputStream os = file.getContent().getOutputStream();BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, StandardCharsets.UTF_8))) {writer.write("咱们在学习Apache Commons VFS");writer.newLine();writer.write("这是文件写入的示例");}} catch (Exception e) {e.printStackTrace();}}
}

这个例子中,咱们同样先获取到FileObject。如果文件不存在,就先创建一个。然后用getOutputStream方法打开文件输出流,接下来就是写入内容了。

删除文件

有时候咱们还需要删除文件,VFS同样可以轻松做到。看这个例子:

import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemManager;
import org.apache.commons.vfs2.VFS;public class DeleteFileExample {public static void main(String[] args) {try {FileSystemManager fsManager = VFS.getManager();// 这里替换成你的文件路径FileObject file = fsManager.resolveFile("file:///path/to/your/file.txt");if (file.exists()) {file.delete();System.out.println("文件已删除");} else {System.out.println("文件不存在");}} catch (Exception e) {e.printStackTrace();}}
}

在这个例子中,小黑先检查文件是否存在,如果存在,就直接调用delete方法删除。

第4章:高级文件操作技巧

创建和遍历文件夹

在处理文件的时候,咱们经常需要创建新的文件夹,或者遍历某个文件夹里的所有文件。让我们来看看VFS如何做到这些。

创建文件夹

创建文件夹其实很简单。下面这个例子会展示给你看:

import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemManager;
import org.apache.commons.vfs2.VFS;public class CreateDirectoryExample {public static void main(String[] args) {try {FileSystemManager fsManager = VFS.getManager();// 这里替换成你想创建的文件夹路径FileObject dir = fsManager.resolveFile("file:///path/to/your/new/dir");// 如果文件夹不存在,则创建if (!dir.exists()) {dir.createFolder();System.out.println("文件夹创建成功");}} catch (Exception e) {e.printStackTrace();}}
}

在这段代码中,我们使用createFolder方法来创建一个新的文件夹。

遍历文件夹

接下来,如果你想看看某个文件夹里都有些什么,VFS也可以帮到你。看这个例子:

import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemManager;
import org.apache.commons.vfs2.FileSelectInfo;
import org.apache.commons.vfs2.FileSelector;
import org.apache.commons.vfs2.VFS;
import org.apache.commons.vfs2.FileType;public class ListFilesExample {public static void main(String[] args) {try {FileSystemManager fsManager = VFS.getManager();// 这里替换成你的文件夹路径FileObject dir = fsManager.resolveFile("file:///path/to/your/dir");// 使用自定义的文件选择器来列出所有文件FileObject[] files = dir.findFiles(new FileSelector() {@Overridepublic boolean includeFile(FileSelectInfo fileInfo) throws Exception {return fileInfo.getFile().getType() == FileType.FILE;}@Overridepublic boolean traverseDescendents(FileSelectInfo fileInfo) throws Exception {return true;}});for (FileObject file : files) {System.out.println(file.getName());}} catch (Exception e) {e.printStackTrace();}}
}

在这个例子中,我们用findFiles方法和一个自定义的FileSelector来获取文件夹中所有的文件。通过这种方式,你可以灵活地选择要列出哪些文件。

文件的复制和移动

在文件操作中,复制和移动文件也是常见需求。VFS让这些操作变得轻而易举。

复制文件

来看看如何使用VFS复制文件:

import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemManager;
import org.apache.commons.vfs2.VFS;public class CopyFileExample {public static void main(String[] args) {try {FileSystemManager fsManager = VFS.getManager();// 这里替换成你的源文件和目标文件路径FileObject sourceFile = fsManager.resolveFile("file:///path/to/your/source/file.txt");FileObject targetFile = fsManager.resolveFile("file:///path/to/your/target/file.txt");// 执行文件复制targetFile.copyFrom(sourceFile, Selectors.SELECT_SELF);System.out.println("文件复制成功");} catch (Exception e) {e.printStackTrace();}}
}

这段代码展示了如何将一个文件从一个位置复制到另一个位置。

移动文件

最后,如果你想移动文件而不是复制,也可以轻松实现:

import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemManager;
import org.apache.commons.vfs2.VFS;public class MoveFileExample {public static void main(String[] args) {try {FileSystemManager fsManager = VFS.getManager();// 这里替换成你的源文件和目标文件路径FileObject sourceFile = fsManager.resolveFile("file:///path/to/your/source/file.txt");FileObject targetFile = fsManager.resolveFile("file:///path/to/your/target/file.txt");// 执行文件移动sourceFile.moveTo(targetFile);System.out.println("文件移动成功");} catch (Exception e) {e.printStackTrace();}}
}

这段代码演示了如何将文件从一个位置移动到另一个位置。

第5章:处理不同类型的文件系统

连接到FTP服务器

FTP(文件传输协议)是互联网上广泛使用的一种文件传输方式。让我们来看看如何使用VFS连接到FTP服务器并进行文件操作。

连接到FTP服务器

import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemManager;
import org.apache.commons.vfs2.FileSystemOptions;
import org.apache.commons.vfs2.UserAuthenticator;
import org.apache.commons.vfs2.auth.SimpleUserAuthenticator;
import org.apache.commons.vfs2.impl.DefaultFileSystemConfigBuilder;
import org.apache.commons.vfs2.VFS;public class FtpExample {public static void main(String[] args) {try {// 准备认证信息UserAuthenticator auth = new SimpleUserAuthenticator("用户名", "密码", null);FileSystemOptions opts = new FileSystemOptions();DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth);FileSystemManager fsManager = VFS.getManager();// 使用ftp协议,连接到FTP服务器FileObject remoteFile = fsManager.resolveFile("ftp://ftp.example.com/path/to/file.txt", opts);// 接下来就可以对remoteFile进行操作了,比如读取、写入等// ...} catch (Exception e) {e.printStackTrace();}}
}

在这个例子中,我们首先创建了一个UserAuthenticator,用于认证FTP服务器的登录信息。然后通过FileSystemManager建立了一个FTP连接。注意,这里的URL是以ftp://开头的,表示这是一个FTP协议的连接。

使用SFTP进行安全文件传输

SFTP(SSH文件传输协议)是FTP的安全版本。它通过SSH协议为文件传输提供了加密和安全的认证机制。

使用SFTP连接

import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemManager;
import org.apache.commons.vfs2.FileSystemOptions;
import org.apache.commons.vfs2.UserAuthenticator;
import org.apache.commons.vfs2.auth.SimpleUserAuthenticator;
import org.apache.commons.vfs2.impl.DefaultFileSystemConfigBuilder;
import org.apache.commons.vfs2.VFS;public class SftpExample {public static void main(String[] args) {try {// 准备认证信息UserAuthenticator auth = new SimpleUserAuthenticator("用户名", "密码", null);FileSystemOptions opts = new FileSystemOptions();DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth);FileSystemManager fsManager = VFS.getManager();// 使用sftp协议,连接到SFTP服务器FileObject remoteFile = fsManager.resolveFile("sftp://sftp.example.com/path/to/file.txt", opts);// 接下来就可以对remoteFile进行操作了,比如读取、写入等// ...} catch (Exception e) {e.printStackTrace();}}
}

在这个示例中,连接到SFTP服务器的方式与FTP类似,不同之处在于URL的协议部分是sftp://。这样,我们就可以利用SFTP的安全性来进行文件传输了。

第6章:异常处理与安全性

异常处理

在使用VFS进行文件操作时,可能会遇到各种各样的异常,比如文件找不到、读写错误等。正确地处理这些异常是非常重要的。

基本的异常处理

import org.apache.commons.vfs2.FileSystemException;public class ExceptionHandlingExample {public static void main(String[] args) {try {// 这里放置你的VFS操作代码// ...} catch (FileSystemException e) {System.err.println("发生了文件系统异常:" + e.getMessage());// 这里可以进行更详细的异常处理,比如根据不同的异常类型做不同的处理} catch (Exception e) {System.err.println("发生了其他异常:" + e.getMessage());}}
}

在这个示例中,咱们捕获了FileSystemException,这是VFS操作中常见的异常类型。同时,也捕获了其他类型的异常,以确保程序的健壮性。

安全性考虑

在进行文件操作时,安全性是一个不容忽视的话题。尤其是在处理网络文件系统时,正确地管理认证信息尤为重要。

安全地处理认证信息

在连接到需要认证的文件系统(如FTP、SFTP)时,咱们需要提供用户名和密码。这些信息需要安全地处理。

import org.apache.commons.vfs2.UserAuthenticator;
import org.apache.commons.vfs2.auth.SimpleUserAuthenticator;
import org.apache.commons.vfs2.impl.DefaultFileSystemConfigBuilder;
import org.apache.commons.vfs2.FileSystemOptions;public class SecureAuthExample {public static void main(String[] args) {try {// 安全地存储用户名和密码char[] username = "你的用户名".toCharArray();char[] password = "你的密码".toCharArray();UserAuthenticator auth = new SimpleUserAuthenticator(new String(username), new String(password), null);FileSystemOptions opts = new FileSystemOptions();DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth);// 在这里进行文件操作// ...// 清除认证信息java.util.Arrays.fill(username, ' ');java.util.Arrays.fill(password, ' ');} catch (Exception e) {e.printStackTrace();}}
}

在这个示例中,咱们使用字符数组来存储用户名和密码,并在使用完毕后立即清除这些敏感信息。这是一种提高安全性的常见做法。

第7章:性能优化和最佳实践

性能优化技巧

在使用VFS进行文件操作时,性能是一个不容忽视的因素。尤其是在处理大量文件或者大型项目时,性能优化显得尤为重要。

缓存文件系统管理器

一个常见的性能优化技巧是缓存FileSystemManager的实例。因为创建FileSystemManager实例可能是一个资源密集型的操作,所以重用实例可以节省时间和资源。

import org.apache.commons.vfs2.FileSystemManager;
import org.apache.commons.vfs2.VFS;public class VfsOptimizationExample {private static FileSystemManager fsManager;static {try {// 初始化并缓存FileSystemManager实例fsManager = VFS.getManager();} catch (Exception e) {e.printStackTrace();}}public static FileSystemManager getManager() {return fsManager;}// 在这里进行你的文件操作// ...
}

在这个例子中,我们创建了一个静态的FileSystemManager实例,并在整个应用中重用它。

优化文件读取和写入

在进行文件读取和写入操作时,使用合适的缓冲和流处理技术也是提升性能的一个重要方面。

// 这里以文件写入为例
import org.apache.commons.vfs2.FileObject;
import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;public class FileWriteOptimizationExample {public static void writeFile(FileObject file, String content) {try (OutputStream out = file.getContent().getOutputStream();BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, StandardCharsets.UTF_8))) {writer.write(content);// 使用合适的缓冲可以提高写入性能} catch (Exception e) {e.printStackTrace();}}// 在这里调用writeFile方法// ...
}
最佳实践

除了性能优化,遵循一些最佳实践也能让你的VFS使用更加高效和安全。

合理管理文件系统的生命周期

在使用VFS时,合理管理文件系统资源的生命周期是很重要的。这意味着在不需要文件系统资源时,应该及时释放它们。

import org.apache.commons.vfs2.FileObject;public class LifecycleManagementExample {public static void processFile(String filePath) {FileObject file = null;try {file = VfsOptimizationExample.getManager().resolveFile(filePath);// 对文件进行操作// ...} catch (Exception e) {e.printStackTrace();} finally {// 确保文件对象被正确关闭if (file != null) {try {file.close();} catch (Exception e) {e.printStackTrace();}}}}// 在这里调用processFile方法// ...
}

在这个示例中,无论操作成功还是发生异常,我们都确保了在finally块中关闭文件对象,这有助于防止资源泄露。

第8章:实际案例分析

案例一:从远程FTP服务器下载文件

在很多应用场景中,我们需要从远程FTP服务器下载文件。使用VFS,这个过程可以简化许多。

下载文件的示例代码

import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemManager;
import org.apache.commons.vfs2.FileSystemOptions;
import org.apache.commons.vfs2.UserAuthenticator;
import org.apache.commons.vfs2.auth.SimpleUserAuthenticator;
import org.apache.commons.vfs2.impl.DefaultFileSystemConfigBuilder;
import org.apache.commons.vfs2.VFS;
import java.io.InputStream;
import java.io.FileOutputStream;
import java.io.BufferedOutputStream;public class FtpDownloadExample {public static void downloadFile(String remoteFilePath, String localFilePath) {FileObject remoteFile = null;try {// 设置FTP登录信息UserAuthenticator auth = new SimpleUserAuthenticator("用户名", "密码", null);FileSystemOptions opts = new FileSystemOptions();DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth);FileSystemManager fsManager = VFS.getManager();remoteFile = fsManager.resolveFile("ftp://ftp.example.com" + remoteFilePath, opts);// 执行下载操作try (InputStream in = remoteFile.getContent().getInputStream();BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(localFilePath))) {byte[] buffer = new byte[1024];int len;while ((len = in.read(buffer)) > 0) {out.write(buffer, 0, len);}}} catch (Exception e) {e.printStackTrace();} finally {if (remoteFile != null) {try {remoteFile.close();} catch (Exception e) {e.printStackTrace();}}}}
}

在这个案例中,我们通过VFS连接到FTP服务器,并从中下载文件到本地路径。这个过程展示了VFS在网络文件操作中的便捷性。

案例二:将日志文件上传到SFTP服务器

假设在一个企业应用中,我们需要将生成的日志文件定期上传到安全的SFTP服务器。使用VFS可以轻松实现这一功能。

上传文件的示例代码

import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemManager;
import org.apache.commons.vfs2.FileSystemOptions;
import org.apache.commons.vfs2.UserAuthenticator;
import org.apache.commons.vfs2.auth.SimpleUserAuthenticator;
import org.apache.commons.vfs2.impl.DefaultFileSystemConfigBuilder;
import org.apache.commons.vfs2.VFS;
import java.io.FileInputStream;
import java.io.BufferedInputStream;public class SftpUploadExample {public static void uploadFile(String localFilePath, String remoteFilePath) {FileObject localFile = null;FileObject remoteFile = null;try {// 设置SFTP登录信息UserAuthenticator auth = new SimpleUserAuthenticator("用户名", "密码", null);FileSystemOptions opts = new FileSystemOptions();DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth);FileSystemManager fsManager = VFS.getManager();localFile = fsManager.resolveFile("file://" + localFilePath);remoteFile = fsManager.resolveFile("sftp://sftp.example.com" + remoteFilePath, opts);// 执行上传操作try (BufferedInputStream in = new BufferedInputStream(new FileInputStream(localFilePath))) {remoteFile.copyFrom(localFile, Selectors.SELECT_SELF);}} catch (Exception e) {e.printStackTrace();} finally {if (localFile != null) {try {localFile.close();} catch (Exception e) {e.printStackTrace();}}if (remoteFile != null) {try {remoteFile.close();} catch (Exception e) {e.printStackTrace();}}}}
}

在这个案例中,我们将本地的日志文件上传到SFTP服务器。这个过程不仅简化了文件上传的代码,还保证了数据传输的安全性。

第9章:总结

Apache Commons VFS是一个非常强大和灵活的工具,它为处理各种文件系统提供了统一的接口。无论你是在处理本地文件,还是需要与远程服务器进行文件交换,VFS都能提供简洁高效的解决方案。通过合理地使用VFS,我们不仅能提高代码的可读性和可维护性,还能确保应用的性能和安全性。

希望这个博客能帮助大家在日常工作中更好地使用Apache Commons VFS。

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

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

相关文章

Tomcat Notes: Deployment File

This is a personal study notes of Apache Tomcat. Below are main reference material. - YouTube Apache Tomcat Full Tutorial&#xff0c;owed by Alpha Brains Courses. https://www.youtube.com/watch?vrElJIPRw5iM&t801s 1、Tomcat deployment1.1、Two modes of …

test ui-02-UI 测试组件之 Appium 入门介绍

Appium简介 正如主页所述&#xff0c;Appium的目标是支持许多不同平台&#xff08;移动、Web、桌面等&#xff09;的UI自动化。 不仅如此&#xff0c;它还旨在支持用不同语言&#xff08;JS、Java、Python等&#xff09;编写的自动化代码。 将所有这些功能组合到一个程序中是…

贝叶斯推断:细谈贝叶斯变分和贝叶斯网络

1. 贝叶斯推断 统计推断这件事大家并不陌生&#xff0c;如果有一些采样数据&#xff0c;我们就可以去建立模型&#xff0c;建立模型之后&#xff0c;我们通过对这个模型的分析会得到一些结论&#xff0c;不管我们得到的结论是什么样的结论&#xff0c;我们都可以称之为是某种推…

数据结构【线性表篇】(一)

数据结构【线性表篇】(一&#xff09; 文章目录 数据结构【线性表篇】(一&#xff09;前言为什么突然想学算法了&#xff1f;为什么选择码蹄集作为刷题软件&#xff1f; 目录一、顺序表(一)、顺序表的定义(二)、顺序表的插入删除(三)、顺序表的查找 二、完整代码(一)、顺序表的…

骑砍战团MOD开发(29)-module_scenes.py游戏场景

骑砍1战团mod开发-场景制作方法_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Cw411N7G4/ 一.骑砍游戏场景 骑砍战团中进入城堡,乡村,战斗地图都被定义为场景,由module_scenes.py进行管理。 scene(游戏场景) 天空盒(Skyboxes.py) 地形(terrain code) 场景物(scene_…

《3D数学基础-图形和游戏开发》阅读笔记 | 3D数学基础 (学习中)

文章目录 3D数学基础矢量/向量概述 - 什么是向量单位矢量&#xff1a;只关注方向不关注大小 数学运算矢量的加法与减法减法的几何意义计算一个点到另一个点的位移矢量的点积与叉积 矩阵矩阵的几何意义 3D数学基础 矢量/向量 在笔记中 变量使用小写字母表示&#xff0c;a由于…

Springboot集成RabbitMq二

接上一篇&#xff1a;Springboot集成RabbitMq一-CSDN博客 1、搭建项目-消费者 与之前一样 2、创建配置类 package com.wym.rabbitmqconsumer.utils;import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.spring…

2023-12-16 LeetCode每日一题(统计区间中的整数数目)

2023-12-16每日一题 一、题目编号 2276. 统计区间中的整数数目二、题目链接 点击跳转到题目位置 三、题目描述 给你区间的 空 集&#xff0c;请你设计并实现满足要求的数据结构&#xff1a; **新增&#xff1a;**添加一个区间到这个区间集合中。 **统计&#xff1a;**计算…

华为服务器安装银河麒麟V10操作系统(IBMC安装)

iBMC是华为面向服务器全生命周期的服务器嵌入式管理系统。提供硬件状态监控、部署、节能、安全等系列管理工具&#xff0c;标准化接口构建服务器管理更加完善的生态系统。 服务器BMC IP&#xff1a;192.168.2.100 一、准备工作 1、确保本机和服务器BMC管理口在同一网络 2、银…

用Audio2Face驱动UE - MetaHuman

新的一年咯&#xff0c;很久没发博客了&#xff0c;就发两篇最近的研究吧。 开始之前说句话&#xff0c;别轻易保存任何内容&#xff0c;尤其是程序员不要轻易Ctrl S 在UE中配置Audio2Face 先检查自身电脑配置看是否满足&#xff0c;按最小配置再带个UE可能会随时崩&#x…

设计模式--适配器模式

适配器模式 适配器模式&#xff08;Adapter&#xff09;&#xff0c;将一个类的接口转换为客户希望的另一个接口&#xff0c;Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 系统的数据和行为都正确&#xff0c;但接口不符合时&#xff0c;我们应该…

19、BLIP-2

简介 github 通过利用预训练的视觉模型和语言模型来提升多模态效果和降低训练成本&#xff0c;预训练的视觉模型能够提供高质量的视觉表征&#xff0c;预训练的语言模型则提供了强大的语言生成能力。 实现过程 为了弥合模态差距&#xff0c;提出了一个分两个阶段预训练的 Qu…

YOLOv5算法进阶改进(10)— 更换主干网络之MobileViTv3 | 轻量化Backbone

前言:Hello大家好,我是小哥谈。MobileViTv3是一种改进的模型架构,用于图像分类任务。它是在MobileViTv1和MobileViTv2的基础上进行改进的,通过引入新的模块和优化网络结构来提高性能。本节课就给大家介绍一下如何在主干网络中引入MobileViTv3网络结构,希望大家学习之后能够…

MySQL基础学习: 由delete和insert操作导致的死锁问题

一、问题复现&#xff1a;表结构 CREATE TABLE user_props (user_id bigint NOT NULL ,prop_key varchar(100) NOT NULL ,prop_value varchar(100) NOT NULL,PRIMARY KEY (user_id,prop_key) )二、死锁测试 &#xff08;1&#xff09;开启两个事务 &#xff08;2&#xff09;…

C#中使用is关键字检查对象是否与给定类型兼容

目录 一、定义 二、示例 三、生成 在程序的开发过程中经常会使用类型转换&#xff0c;如果类型转换不成功则会出现异常&#xff0c;从抛出异常到捕获并处理异常&#xff0c;无形中增加了系统的开销&#xff0c;而且太过频繁地处理异常还会严重地影响系统的稳定性。is关键字可…

力扣hot100 对称二叉树 递归 队列

&#x1f468;‍&#x1f3eb; 题目地址 &#x1f468;‍&#x1f3eb; 参考思路 递归的难点在于&#xff1a;找到可以递归的点 为什么很多人觉得递归一看就会&#xff0c;一写就废。 或者说是自己写无法写出来&#xff0c;关键就是你对递归理解的深不深。 对于此题&#xf…

解读 $mash 通证 “Fair Launch” 规则,将公平发挥极致

Solmash 是 Solana 生态中由社区主导的铭文资产 LaunchPad 平台&#xff0c;该平台旨在为 Solana 原生铭文项目&#xff0c;以及通过其合作伙伴 SoBit 跨链桥桥接到 Solana 的 Bitcoin 生态铭文项目提供更广泛的启动机会。有了 Solmash&#xff0c;将会有更多的 Solana 生态的铭…

熔断、隔离、重试、降级、超时、限流,高可用架构流量治理核心策略全掌握

可用性的定义 在探讨高可用架构之前&#xff0c;让我们以 O2 系统为例&#xff0c;解释一下何谓可用性。O2 是腾讯内部的一个广告投放系统&#xff0c;专注于提升投放效率、分析广告效果&#xff0c;拥有自动化广告投放、AIGC 自动化素材生产等多种功能。 其整体架构概览如下&…

springboot日志

1、日志用途 故障排查和调试&#xff1a;当项目出现异常或者故障时&#xff0c;日志记录可以快速帮助我们定位到异常的部分以及知道异常的原因。性能监测和优化&#xff1a;通过在关键代码路径中添加日志记录&#xff0c;可以了解应用程序的性能表现&#xff0c;并根据性能表…

最新-mybatis-plus 3.5分页插件配置

mybatis-plus 3.5分页插件配置 前提 1.项目不是springboot, 是以前的常规spring项目 2.mp 从3.2升级到3.5&#xff0c;升级后发现原本的分页竟然不起作用了&#xff0c;每次查询都是查出所有 前后配置对比 jar包对比 jsqlparser我这里单独引了包&#xff0c;因为版本太低…