当前位置: 首页 > news >正文

golang标准库archive/tar实现打包压缩及解压


文章目录

  • 前言
  • 一、单个文件操作
    • 1.单个文件打包示例
    • 2.单个文件解包示例
  • 二、目录示例
    • 1.打包压缩
    • 2.解包
  • 补充


前言

这个包就是将文件进行打包和解包,通俗理解就是Linux 下的 tar 命令。 主要是通过 tar.Reader 读取 tar 包,通过 tar.Writer 写入 tar包,在写入的过程中再设置一下头,详细的过程以示例的方式进行展示,可以查看代码里面的注释。

标准库 tar 中文文档https://studygolang.com/static/pkgdoc/pkg/archive_tar.html


一、单个文件操作

1.单个文件打包示例

package mainimport ("os""log""archive/tar""fmt""io"
)func main() {// 准备打包的源文件var srcFile = "sshd"// 打包后的文件var desFile = fmt.Sprintf("%s.tar",srcFile)// 需要注意文件的打开即关闭的顺序,因为 defer 是后入先出,所以关闭顺序很重要// 第一次写这个示例的时候就没注意,导致写完的 tar 包不完整// ###### 第 1 步,先准备好一个 tar.Writer 结构,然后再向里面写入内容。 ######// 创建一个文件,用来保存打包后的 passwd.tar 文件fw, err := os.Create(desFile)ErrPrintln(err)defer fw.Close()// 通过 fw 创建一个 tar.Writertw := tar.NewWriter(fw)// 这里不要忘记关闭,如果不能成功关闭会造成 tar 包不完整// 所以这里在关闭的同时进行判断,可以清楚的知道是否成功关闭defer func() {if err := tw.Close(); err != nil {ErrPrintln(err)}}()// ###### 第 2 步,处理文件信息,也就是 tar.Header 相关的 ######// tar 包共有两部分内容:文件信息和文件数据// 通过 Stat 获取 FileInfo,然后通过 FileInfoHeader 得到 hdr tar.*Headerfi, err := os.Stat(srcFile)ErrPrintln(err)hdr, err := tar.FileInfoHeader(fi, "")// 将 tar 的文件信息 hdr 写入到 twerr = tw.WriteHeader(hdr)ErrPrintln(err)// 将文件数据写入// 打开准备写入的文件fr, err := os.Open(srcFile)ErrPrintln(err)defer fr.Close()written, err := io.Copy(tw, fr)ErrPrintln(err)log.Printf("共写入了 %d 个字符的数据\n",written)
}// 定义一个用来打印的函数,少写点代码,因为要处理很多次的 err
// 后面其他示例还会继续使用这个函数,就不单独再写,望看到此函数了解
func ErrPrintln(err error)  {if err != nil {log.Println(err)os.Exit(1)}
}

2.单个文件解包示例

package mainimport ("os""archive/tar""io""log"
)func main() {var srcFile = "passwd.tar"// 将 tar 包打开fr, err := os.Open(srcFile)ErrPrintln(err)defer fr.Close()// 通过 fr 创建一个 tar.*Reader 结构,然后将 tr 遍历,并将数据保存到磁盘中tr := tar.NewReader(fr)for hdr, err := tr.Next(); err != io.EOF; hdr, err = tr.Next(){// 处理 err != nil 的情况ErrPrintln(err)// 获取文件信息fi := hdr.FileInfo()// 创建一个空文件,用来写入解包后的数据fw, err := os.Create(fi.Name())ErrPrintln(err)// 将 tr 写入到 fwn, err := io.Copy(fw, tr)ErrPrintln(err)log.Printf("解包: %s 到 %s ,共处理了 %d 个字符的数据。", srcFile,fi.Name(),n)// 设置文件权限,这样可以保证和原始文件权限相同,如果不设置,会根据当前系统的 umask 来设置。os.Chmod(fi.Name(),fi.Mode().Perm())// 注意,因为是在循环中,所以就没有使用 defer 关闭文件// 如果想使用 defer 的话,可以将文件写入的步骤单独封装在一个函数中即可fw.Close()}
}func ErrPrintln(err error){if err != nil {log.Fatalln(err)os.Exit(1)}
}

二、目录示例

打包整个目录,且打包的时候通过 gzip 或者 bzip2 压缩。如果要打包整个目录,可以通过递归的方式来实现。此处只演示 gzip 方式压缩,这个实现非常简单,只需要在 fw 和 tw 之前加上一层压缩即可

1.打包压缩

代码如下(示例):

package mainimport ("archive/tar""compress/gzip""fmt""io""os""path/filepath"
)
func createTarFile(tarFilePath string, sourceDir string) error {// 创建Tar文件tarFile, err := os.Create(tarFilePath)if err != nil {return err}defer tarFile.Close()// 将 tar 包使用 gzip 压缩,其实添加压缩功能很简单,// 只需要在 fw 和 tw 之前加上一层压缩就行了,和 Linux 的管道的感觉类似gw := gzip.NewWriter(tarFile)defer gw.Close()// 创建Tar写入器tarWriter := tar.NewWriter(tarFile)defer tarWriter.Close()// 遍历源目录并添加文件到Tarerr = filepath.Walk(sourceDir, func(path string, info os.FileInfo, err error) error {if err != nil {return err}// 创建Tar头信息header, err := tar.FileInfoHeader(info, "")if err != nil {return err}// 设置文件路径//这里的思路就是递归处理目录及目录下的所有文件和目录header.Name, err = filepath.Rel(filepath.Dir(sourceDir), path)fmt.Printf("header.Name:%s\n", header.Name)if err != nil {return err}// 写入头信息if err := tarWriter.WriteHeader(header); err != nil {return err}// 如果是文件,写入文件内容if !info.IsDir() {file, err := os.Open(path)if err != nil {return err}defer file.Close()_, err = io.Copy(tarWriter, file)return err}return nil})return err
}
func main(){tarFilePath := "output.tar"sourceDir := "/etc/sshd/sshd_config"err = createTarFile(tarFilePath, sourceDir)if err != nil {panic(err)}
}

2.解包

代码如下(示例):

package mainimport ("archive/tar""compress/gzip""fmt""io""os""path/filepath"
)func main() {var dst = "" // 不写就是解压到当前目录var src = "log.tar.gz"UnTar(dst, src)
}func UnTar(dst, src string) (err error) {// 打开准备解压的 tar 包fr, err := os.Open(src)if err != nil {return}defer fr.Close()// 将打开的文件先解压gr, err := gzip.NewReader(fr)if err != nil {return}defer gr.Close()// 通过 gr 创建 tar.Readertr := tar.NewReader(gr)// 现在已经获得了 tar.Reader 结构了,只需要循环里面的数据写入文件就可以了for {hdr, err := tr.Next()switch {case err == io.EOF:return nilcase err != nil:return errcase hdr == nil:continue}// 处理下保存路径,将要保存的目录加上 header 中的 Name// 这个变量保存的有可能是目录,有可能是文件,所以就叫 FileDir 了……dstFileDir := filepath.Join(dst, hdr.Name)// 根据 header 的 Typeflag 字段,判断文件的类型switch hdr.Typeflag {case tar.TypeDir: // 如果是目录时候,创建目录// 判断下目录是否存在,不存在就创建if b := ExistDir(dstFileDir); !b {// 使用 MkdirAll 不使用 Mkdir ,就类似 Linux 终端下的 mkdir -p,// 可以递归创建每一级目录if err := os.MkdirAll(dstFileDir, 0775); err != nil {return err}}case tar.TypeReg: // 如果是文件就写入到磁盘// 创建一个可以读写的文件,权限就使用 header 中记录的权限// 因为操作系统的 FileMode 是 int32 类型的,hdr 中的是 int64,所以转换下file, err := os.OpenFile(dstFileDir, os.O_CREATE|os.O_RDWR, os.FileMode(hdr.Mode))if err != nil {return err}n, err := io.Copy(file, tr)if err != nil {return err}// 将解压结果输出显示fmt.Printf("成功解压: %s , 共处理了 %d 个字符\n", dstFileDir, n)// 不要忘记关闭打开的文件,因为它是在 for 循环中,不能使用 defer// 如果想使用 defer 就放在一个单独的函数中file.Close()}}return nil
}// 判断目录是否存在
func ExistDir(dirname string) bool {fi, err := os.Stat(dirname)return (err == nil || os.IsExist(err)) && fi.IsDir()
}

补充

1、archive/tar打包和解包的操作只能在当前服务器上执行,不能再远程服务器上操作,例如:你ssh到一台远程机器上执行这个打包操作,就会失败,实际上操作的还是当前机器
2、在使用 tar.Writer 时,需要使用 tar.Header 结构体设置文件的元信息,包括文件名、大小等。
3、在读取 tar 归档文件时,可以通过 tar.Reader 的 Next 方法获取下一个文件的头信息,并使用 io.Copy 复制文件内容

相关文章:

golang标准库archive/tar实现打包压缩及解压

文章目录 前言一、单个文件操作1.单个文件打包示例2.单个文件解包示例 二、目录示例1.打包压缩2.解包 补充 前言 这个包就是将文件进行打包和解包,通俗理解就是Linux 下的 tar 命令。 主要是通过 tar.Reader 读取 tar 包,通过 tar.Writer 写入 tar包&am…...

模方匀色功能中,加载的模板文件从哪里来

使用 DasViewerV3.1.2及以上版本导出的颜色调整文件 模方是一款针对实景三维模型的冗余碎片、水面残缺、道路不平、标牌破损、纹理拉伸模糊等共性问题研发的实景三维模型修复编辑软件。模方4.2新增内置“自动UV展开”功能,新增局部调色功能和DOM匀色功能等。同时可与…...

maya 删除 Ctrl + Delete vs Delete

在 Autodesk Maya 中删除选定顶点的步骤: 1. 选择顶点: 进入顶点选择模式: 按 F9 键(切换到顶点选择模式)。 或者,在工具栏中点击顶点选择图标(顶点模式)。 在视图中选择您想要删…...

为何String不可变,String的运算符重载

1.为何String不可变 java9之前,String的源码中是用字符数组实现的,同时使用了final和private修饰,被final修饰的结果就是变量不可修改、类不可继承、方法不可重写,被private修饰就无法对外暴露,这就是为何String不可变…...

WebRTC :原理、协议和应用场景

WebRTC(Web Real-Time Communication)是一种用于在Web浏览器和移动应用程序之间进行实时通信的开放标准。它通过将音频、视频和数据传输集成到Web浏览器中,使得实时通信变得简单且无需任何插件或第三方软件。 一、WebRTC 的原理 WebRTC的实…...

Windows FTP服务器搭建指南

在Windows上搭建FTP服务器可以通过以下步骤完成。这里以Windows 10为例,使用系统自带的IIS(Internet Information Services)来搭建FTP服务器。 步骤1:安装IIS和FTP服务器组件 打开“控制面板”: 按 Win R&#xff0c…...

DP协议:Link层(二)

书接上文,内容多了难免会有一种知识点零碎感,但是坚持学下去,有一天你会发现已经不知不觉可以链接成一张知识网络了。 AUX提供的services 前面咱刚刚简单的认识了AUX CH的状态和仲裁,这次咱们接着聊聊AUX提供的services。 管理连接和设备:AUX CH就像是一个管家,负责找到…...

HAL 库 HAL_UARTEx_ReceiveToIdle_IT 函数解析

一、存在位置:stm32f1xx_hal_uart.c 二、具体代码 二、返回值:HAL_StatusTypeDef 通过查看返回值HAL_StatusTypeDef在stm32f1xx_hal_edf.h文件中定义为结构体类型。 status:(进展的)状况,情形 三、函数名…...

C++ 设计模式:职责链模式(Chain of Responsibility)

链接:C 设计模式 链接:C 设计模式 - 组合模式 职责链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合。这些对象通过…...

数据库约束和查询

一 约束意义 这个后面的字段是什么意思呢? 先前说数据类型是一种约束,约束我们只能放该类型的数据,还有其它的约束来保证数据的合法性,下面的字段就和约束有关。 编译器的编译就是一个约束,保证我们的代码一定是语法合格的。我们…...

【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(二)

****非斜体正文为原文献内容(也包含笔者的补充),灰色块中是对文章细节的进一步详细解释! 3.1.2 基于注意力的解释(Attention-Based Explanation) 注意力机制可以揭示输入数据中各个部分之间的关系&#…...

AI大模型-提示工程学笔记1

卷首语:我所知的是我自己非常无知,所以我要不断学习。 写给AI入行比较晚的小白们(比如我自己)看的,大神可以直接路过无视了。 几个基本概念 1. 给LLM提示 用户可以通过简单的提示词(Prompts&#xff09…...

webrtc-internals调试工具

Google 的 Chrome(87 或更高版本)WebRTC 内部工具是一套内置于 Chrome 浏览器中的调试工具; webrtc-internals 能够查看有关视频和音频轨道、使用的编解码器以及流的一般质量的详细信息。这些知识对于解决音频和视频质量差的问题非常有帮助。 webrtc-int…...

百度PaddleSpeech识别大音频文件报错

一、背景 公司前同事留下了一套语音识别项目,内部使用百度PaddleSpeech。在项目验收的时候发现无法识别大音频文件,但是可以识别小音频文件。 这套项目是通过python调用的百度PaddleSpeech,然后提供了restful接口,然后java项目可…...

No.3十六届蓝桥杯备战|数据类型长度|sizeof|typedef|练习(C++)

数据类型⻓度 每⼀种数据类型都有⾃⼰的⻓度,使⽤不同的数据类型,能够创建出⻓度不同的变量,变量⻓度的不同,存储的数据范围就有所差异。 sizeof操作符 sizeof 是⼀个关键字,也是操作符,专⻔是⽤来计算特…...

MapReduce相关概念(自用)

MapReduce:分布式计算模型 MapReduce 是一种分布式计算模型,由 Google 在 2004 年提出,用于大规模数据集(TB 或 PB 级别)的分布式处理。它通过简单的编程模型,将复杂的分布式计算分解为两个基本阶段&#…...

Nginx - 整合lua 实现对POST请求的参数拦截校验(不使用Openresty)

文章目录 概述步骤 1: 安装 Nginx 和 Lua 模块步骤 2: 创建 Lua 脚本用于参数校验步骤 3: 配置 Nginx 使用 Lua 脚本写法二: 状态码写法三 : 返回自定义JSON复杂的正则校验 步骤 4: 测试和验证ngx.HTTP_* 枚举值 概述 一个不使用 OpenResty 的 Nginx 集…...

I2C(一):存储器模式:stm32作为主机对AT24C02写读数据

存储器模式:在HAL库中,I2C有专门对存储器外设设置的库函数 I2C(一):存储器模式的使用 1、I2C轮询式写读AT24C02一页数据2、I2C轮询式写读AT24C02多页数据3、I2C中断式写读AT24C02一页数据4、I2C使用DMA式写读AT24C02一…...

AI助手网站

​​​​​​​ chatgpt :https://chatgpt.com/ https://openai.com/index/chatgpt/ 百度ai助手 https://chat.baidu.com/ 百度AI助手https://chat.baidu.com/ 文心快码 文心快码BaiduComate 文心快码BaiduComate 文心快码BaiduComate有代码问题,问文…...

初始nginx

华子目录 nginx介绍nginx功能介绍基础特性web服务相关功能nginx进程结构web请求处理机制 nginx进程间通信nginx启动与http连接建立http处理过程 nginx模块介绍nginx命令演示 nginx介绍 nginx是免费的、开源的、高性能的HTTP和反向代理服务器、邮件代理服务器、以及TCP/UDP代理服…...

可扩展性设计架构模式——事件驱动架构

事件驱动架构(Event-Driven Architecture, EDA)是一种可扩展性设计软件架构模式,它通过事件来触发和通信(以事件为核心),实现不同系统组件之间的解耦(促进应用程序或系统部件之间的松耦合通信&a…...

Prometheus 专栏 —— Prometheus安装、配置

配置文件基本结构 global: 全局配置 scrape_interval: 抓取目标指标的频率,默认为 1minevaluation_interval: 评估告警规则的频率,默认为 1minscrape_timeout: 抓取目标指标数据拉取超时,默认为 10s,如果出现 context deadline e…...

Java并发编程面试题:线程池Fork/Join(19题)

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...

【每日学点鸿蒙知识】WebView代理、2D绘制矩形圆角、TextInput清理按钮、pdf滑动、icon配置问题

1、HarmonyOS Webview 支持设置代理功能吗? 使用Web的onInterceptRequest先拦截再代理来实现。具体可以参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-web-V5#ZH-CN_TOPIC_0000001930757269__on…...

抽奖系统(1)(Java 实现)

1. 需求描述 1. 包含管理员的注册与登录 1) 注册包含:姓名、邮箱、手机号、密码 2) 登录包含两种方式 (1) 电话 密码登录 (2) 电话 短信登录;验证码获取 (3) 登录需要校验管理员身份 2. 人员管理:管理员支持创建普通用户,查看…...

数据库系统原理复习汇总

数据库系统原理复习汇总 一、数据库系统原理重点内容提纲 题型:主观题 1、简答题 第一章:数据库的基本概念:数据库、数据库管理系统、三级模式;两级映像、外码 第二章:什么是自然连接、等值连接; 第三…...

基于16QAM的载波同步和定时同步性能仿真,采用四倍采样,包括Costas环和gardner环

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要 载波同步是…...

鸿蒙next RCP网络请求工具类进阶版来了

前言: 各位同学大家好,有一段时间没有更新文章了,最近因为鸿蒙官方的网络请求换掉了了rcp 之前是使用http 这些都是原生开发的 当然有那种三方大家熟知的 axios (这个也是基于http 后面也会过时)所以大家还是要了解一下rcp的原生的网络请求的。那么我们…...

driftingblues6_vh靶机

首先把靶机换成NAT模式 使用 arp-scan 命令扫描网段内存活的主机,以获取靶机ip地址 arp-scn -l 尝试访问ip 使用御剑扫描子域名,尝试访问robots.txt文件 通过访问文件我们发现了一个/textpattern/textpattern目录 访问一下目录发现了登录页面 他还给了…...

Go语言入门

文章目录 零、Linux下Go的安装1.下载、解压2.添加环境变量3.验证安装4.初始化Go模块(1)cd到项目目录(2)初始化模块(3)获取依赖包(4)清理和验证依赖(5)检查 go.mod 文件(6)介绍 go.mod 和 go.sum 文件 5.项目目录结构 一、感性认识1.从 Hello world 开始2.加法函数 二、Go语法1.…...

VS Code中怎样查看某分支的提交历史记录

VsCode中无法直接查看某分支的提交记录,需借助插件才行,常见的插件如果git history只能查看某页面的改动记录,无法查看某分支的整体提交记录,我们可以安装GIT Graph插件来解决这个问题 1.在 VSCode的插件库中搜索 GIT Graph安装&a…...

【杂谈】-AI搜索引擎如何改变传统SEO及其在内容营销中的作用

AI搜索引擎如何改变传统SEO及其在内容营销中的作用 文章目录 AI搜索引擎如何改变传统SEO及其在内容营销中的作用1、什么是AI搜索引擎2、AI搜索引擎对SEO策略的影响3、AI搜索引擎在内容营销转型中的作用4、AI搜索引擎在营销领域的挑战、道德问题和未来5、总结 在当今的数字营销世…...

快速掌握Haproxy原理架构

文章目录 一、原理架构二、无负载均衡三、四层负载均衡的工作流程四、七层负载均衡工作流程五、基础属性mode 属性retries 属性maxconn 属性clitimeout 属性servtimeout 属性states uri 属性 一、原理架构 四层tcp代理:Haproxy仅在客户端和服务器之间双向转发流量&…...

Java中以某字符串开头且忽略大小写字母如何实现【正则表达式(Regex)】

第一种思路是先将它们都转换为小写或大写,再使用String类的startsWith()方法实现: 例如,如下的二个示例: "Session".toLowerCase().startsWith("sEsSi".toLowerCase()); //例子之一//例子之二String str "Hello Wo…...

如何提高Redis服务器的最大打开文件数限制

文章目录 如何提高Redis服务器的最大打开文件数限制问题诊断解决步骤1. 修改系统级别的限制2. 为Redis进程特别设置限制3. 修改Redis配置文件4. 修改systemd服务文件5. 重新加载systemd并重启Redis6. 验证更改 注意事项 如何提高Redis服务器的最大打开文件数限制 在运行高并发…...

React 组件通信完整指南 以及 自定义事件发布订阅系统

React 组件通信完整指南 1. 父子组件通信 1.1 父组件向子组件传递数据 // 父组件 function ParentComponent() {const [data, setData] useState(Hello from parent);return <ChildComponent message{data} />; }// 子组件 function ChildComponent({ message }) {re…...

代码随想录算法【Day5\Day6】

DAY5\Day6 1.熟悉哈希表的数据结构&#xff1a;数组、map和set&#xff0c;使用方法、使用场景 2.哈希表应用场景&#xff1a;解决给你一个元素&#xff0c;判断它在集合里是否出现过。 242.有效的字母异位词 本题用数组解决的。 class Solution { public:bool isAnagram(…...

Oracle 数据库执行计划的查看与分析技巧

目录 Oracle 数据库执行计划的查看与分析技巧一、什么是执行计划二、查看执行计划的方法&#xff08;一&#xff09;使用 EXPLAIN PLAN 命令&#xff08;二&#xff09;通过 SQL Developer 工具查看&#xff08;三&#xff09;启用 AUTOTRACE 功能 三、执行计划中的关键信息解读…...

VMD-SSA-BiLSTM、VMD-BiLSTM、BiLSTM时间序列预测对比

VMD-SSA-BiLSTM、VMD-BiLSTM、BiLSTM时间序列预测对比 目录 VMD-SSA-BiLSTM、VMD-BiLSTM、BiLSTM时间序列预测对比预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.MATLAB实现VMD-SSA-BiLSTM、VMD-BiLSTM、BiLSTM时间序列预测对比; 2.单变量时间序列预测 就是先vmd把变…...

QGIS二次开发(地图符号库操作)

实习三 地图符号库操作 3.1 任务要求 基于QGIS&#xff0c;实现地图符号的设计/存储与显示&#xff1b;基于QGIS实现一个点、线、面shp矢量图层文件的显示。通过设置引用的符号&#xff0c;改变矢量图层的显示效果&#xff1b;可编辑地图的符号库汇中的点符号、线符号、面符号…...

wordpress网站用token登入开发过程

生成跳转token 示例&#xff1a; function generate_login_token($user_id, $secret_key) {$payload [user_id > $user_id,timestamp > time(),];$payload_json json_encode($payload);$signature hash_hmac(sha256, $payload_json, $secret_key);return base64_en…...

Uniapp在浏览器拉起导航

Uniapp在浏览器拉起导航 最近涉及到要在浏览器中拉起导航&#xff0c;对目标点进行路线规划等功能&#xff0c;踩了一些坑&#xff0c;找到了使用方法。&#xff08;浏览器拉起&#xff09; 效果展示 可以拉起三大平台及苹果导航 点击选中某个导航&#xff0c;会携带经纬度跳转…...

在 CentOS 上安装 FFmpeg

在CentOS 上安装 FFmpeg 方法一&#xff1a;在线安装 添加 EPEL 和 RPM Fusion 源&#xff1a; sudo yum install epel-release sudo yum install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm安装 FFmpeg&#xff1a; sudo yu…...

影刀进阶指令 | liblib反推 (SD AI绘图反推)

文章目录 影刀进阶指令 | liblib反推 (SD AI绘图反推)一. 需求二. 流程三. 实现3.1 流程概览3.2 流程步骤讲解1\. 获取png地址2\. 打开页面3\. 上传png文件4\. 获取png的prompt信息 四. 运维 影刀进阶指令 | liblib反推 (SD AI绘图反推) 先看看我们要实现的功能&#xff0c;li…...

WebStorm 创建一个Vue项目

一、下载并安装WebStorm 步骤一 步骤二 选择激活方式 激活码&#xff1a; I2A0QUY8VU-eyJsaWNlbnNlSWQiOiJJMkEwUVVZOFZVIiwibGljZW5zZWVOYW1lIjoiVU5JVkVSU0lEQURFIEVTVEFEVUFMIERFIENBTVBJTkFTIiwiYXNzaWduZWVOYW1lIjoiVGFvYmFv77yaSkVU5YWo5a625qG25rAIOa0uW3peS9nOWupC…...

回归预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现CNN-LSTM卷积长短期记忆神经网络多输入单输出回归…...

rust windwos 两个edit框

use winapi::shared::minwindef::LOWORD; use windows::{core::*,Win32::{Foundation::*,Graphics::Gdi::{BeginPaint, EndPaint, PAINTSTRUCT},System::LibraryLoader::GetModuleHandleA,UI::WindowsAndMessaging::*,}, };// 两个全局静态变量&#xff0c;用于保存 Edit 控件的…...

ArcGIS计算矢量要素集中每一个面的遥感影像平均值、最大值等统计指标

本文介绍在ArcMap软件中&#xff0c;基于矢量面要素集&#xff0c;计算在其中每一个面区域内&#xff0c;遥感影像的像元个数、平均值、总和等统计值&#xff0c;并将统计信息附加到矢量图层的属性表中的方法。 首先&#xff0c;明确一下本文的需求。现在有一个矢量面要素集&am…...

JavaScript高级程序设计基础(十一)

上接语言基础&#xff1a;JavaScript高级程序设计基础&#xff08;十) 五、集合引用类型 5.1 object 此处简单介绍object&#xff0c;object由两种方式可以创造&#xff1a;由构造函数new Object(),或者对象字面量。如果想要修改对象的值可以用点语法&#xff0c;如object.na…...

【服务器学习专栏 1.2 -- 带外管理】

请阅读 嵌入式学习必备专栏 文章目录 Overview服务器带外管理BMC 介绍BMC 特点BMC 工作原理 Overview 从技术的角度&#xff0c;网络管理可分为带外管理&#xff08;out-of-band&#xff09;和带内管理&#xff08;in-band&#xff09;两种管理模式。 带内管理&#xff0c;是指…...