Java中的数据压缩和存储技术:Zip、GZip与Brotli

第1章:引言

大家好,我是小黑,作为一名Java程序员,在业务开发中,常常面临着一个问题:如何高效地处理和传输这些庞大的数据呢?答案就在于数据压缩技术。数据压缩,简而言之,就是用尽可能少的比特表示尽可能多的信息,既节省了存储空间,又加快了数据传输速度。

咱们今天要聊的,是Java中三种常用的数据压缩和存储技术:Zip、GZip和Brotli。这些技术各有特色,能满足不同场景下的需求。比如,Zip是最常见的压缩格式之一,既可以压缩单个文件,也可以压缩文件夹,非常灵活。GZip则是网络传输中常用的格式,特别适合于压缩网页内容,加快网页加载速度。而Brotli,作为相对较新的技术,以其出色的压缩效率和速度,在网络传输上展现了巨大的潜力。

第2章:数据压缩技术简介

数据压缩技术的目的是减少数据在存储和传输时所需的空间,它通过各种算法去除数据中的冗余信息来实现这一点。举个例子,如果一个文件里面充满了重复的信息,比如“哈哈哈哈哈哈”,使用数据压缩技术后,这串信息可能就被简化为“哈*6”,大大减少了数据的大小。

数据压缩分为两种基本类型:无损压缩和有损压缩。无损压缩允许数据在压缩和解压缩后保持原样不变,而有损压缩则在压缩过程中丢弃了一些不那么重要的信息,以换取更高的压缩比。对于文本、源代码或者需要完整保留的数据,咱们通常使用无损压缩;对于图片、视频这类对压缩质量有一定容忍度的数据,则可以考虑使用有损压缩。

在Java中,处理数据压缩的库和API丰富多样,让小黑可以轻松地在项目中实现数据的压缩与解压。比如,使用java.util.zip包下的类,可以方便地对数据进行Zip压缩或解压。下面是一个简单的Zip压缩示例:

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;public class ZipCompressor {public static void compressFile(String sourceFilePath, String zipFilePath) {try {FileOutputStream fos = new FileOutputStream(zipFilePath);ZipOutputStream zos = new ZipOutputStream(fos);File fileToZip = new File(sourceFilePath);FileInputStream fis = new FileInputStream(fileToZip);ZipEntry zipEntry = new ZipEntry(fileToZip.getName());zos.putNextEntry(zipEntry);byte[] bytes = new byte[1024];int length;while ((length = fis.read(bytes)) >= 0) {zos.write(bytes, 0, length);}zos.closeEntry();zos.close();fis.close();fos.close();} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {String sourceFile = "源文件路径";String zipFile = "压缩文件路径.zip";compressFile(sourceFile, zipFile);System.out.println("压缩完成!");}
}

小黑偷偷告诉你一个买会员便宜的网站: 小黑整的视頻会园优惠站

第3章:Zip压缩格式

说起Zip,咱们肯定不陌生。这个格式几乎是压缩技术中的老前辈了,从个人电脑到服务器,无处不在。Zip的魅力在于它的灵活性和普及度,能够同时压缩多个文件或文件夹,形成一个压缩包,既方便存储,又便于传输。

在Java中,处理Zip文件可以说是得心应手。Java提供了java.util.zip包,里面包含了操作Zip文件所需的一切。比如,创建Zip文件、向Zip文件中添加文件,甚至是读取Zip文件中的内容,Java都能轻松搞定。

接下来,小黑将带大家看一个例子,如何使用Java创建一个Zip压缩文件,并向其中添加文件。咱们将通过一个简单的程序来实现这个功能,代码如下:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;public class SimpleZipCompressor {public static void addToZipFile(String fileName, ZipOutputStream zos) throws IOException {// 创建文件输入流,读取待压缩的文件FileInputStream fis = new FileInputStream(fileName);// 创建Zip条目,每个条目代表压缩包中的一个文件ZipEntry zipEntry = new ZipEntry(fileName);zos.putNextEntry(zipEntry);// 缓冲区byte[] bytes = new byte[1024];int length;// 读取文件内容,写入到Zip输出流while ((length = fis.read(bytes)) >= 0) {zos.write(bytes, 0, length);}// 完成该条目的添加zos.closeEntry();fis.close();}public static void main(String[] args) {// 定义Zip文件的名称String zipFileName = "我的压缩文件.zip";try {// 创建Zip输出流,准备写入新的Zip文件FileOutputStream fos = new FileOutputStream(zipFileName);ZipOutputStream zos = new ZipOutputStream(fos);// 向Zip文件添加内容String file1Name = "文件1.txt";String file2Name = "文件2.txt";addToZipFile(file1Name, zos);addToZipFile(file2Name, zos);// 完成并关闭Zip输出流zos.close();fos.close();System.out.println("Zip压缩完成,文件名:" + zipFileName);} catch (IOException e) {System.out.println("压缩过程中出错:" + e.getMessage());}}
}

这段代码演示了如何将两个文本文件文件1.txt文件2.txt压缩进一个名为我的压缩文件.zip的Zip文件中。首先,咱们创建了ZipOutputStream,它是操作Zip文件的核心。接着,为每个需要添加到Zip文件中的文件创建了一个ZipEntry,这个过程通过addToZipFile方法完成。每个ZipEntry实际上就是Zip文件中的一个条目,代表了一个被压缩的文件。通过读取这些文件的内容,并写入到ZipOutputStream中,最终实现了文件的压缩。

Zip格式的优点是显而易见的:它被广泛支持,几乎所有操作系统都内置了对Zip文件的支持,不需要额外的软件就能进行压缩和解压操作。此外,Zip格式还支持密码保护,增加了数据的安全性。

但是,Zip也有它的局限。比如,当涉及到非常大的文件或需要极高压缩比的场景时,Zip可能就不那么高效了。不过,在大多数日常应用场景下,Zip依然是一个非常优秀的选择。

第4章:GZip压缩格式

GZip,名字听起来就像是Zip的亲兄弟,但它其实是在网络世界里更加闪耀的明星。GZip是一种广泛应用于Web传输的压缩格式,特别擅长于压缩单个大文件,比如网页和脚本文件。这就是为什么咱们在浏览网页时,经常能看到GZip这个名字。它能够显著减少传输数据的大小,加速网页的加载速度。

Java中处理GZip格式同样简单。java.util.zip包中的GZIPOutputStreamGZIPInputStream让GZip压缩和解压变得轻而易举。下面,小黑来展示如何使用Java实现GZip压缩和解压。

首先,咱们看看如何用Java来压缩一个文件为GZip格式:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.GZIPOutputStream;public class GZipCompressor {public static void compressFile(String sourceFilePath, String compressedFilePath) {try (FileInputStream fis = new FileInputStream(sourceFilePath);GZIPOutputStream gzos = new GZIPOutputStream(new FileOutputStream(compressedFilePath))) {byte[] buffer = new byte[1024];int len;while ((len = fis.read(buffer)) > 0) {gzos.write(buffer, 0, len);}System.out.println("文件压缩完成,压缩后的文件是:" + compressedFilePath);} catch (IOException e) {System.out.println("压缩过程出错:" + e.getMessage());}}public static void main(String[] args) {String sourceFile = "需要压缩的文件路径";String gzipFile = "压缩后的文件路径.gz";compressFile(sourceFile, gzipFile);}
}

这段代码通过GZIPOutputStream实现了文件的GZip压缩。相比于Zip,GZip通常用于压缩单个文件,而不是文件集,这在处理大型单文件时显示出其便利性。

接下来,如果咱们想要解压GZip文件,也同样简单:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;public class GZipDecompressor {public static void decompressGZipFile(String gzipFilePath, String decompressedFilePath) {try (GZIPInputStream gzis = new GZIPInputStream(new FileInputStream(gzipFilePath));FileOutputStream fos = new FileOutputStream(decompressedFilePath)) {byte[] buffer = new byte[1024];int len;while ((len = gzis.read(buffer)) > 0) {fos.write(buffer, 0, len);}System.out.println("文件解压完成,解压后的文件是:" + decompressedFilePath);} catch (IOException e) {System.out.println("解压过程出错:" + e.getMessage());}}public static void main(String[] args) {String gzipFile = "需要解压的.gz文件路径";String outputFile = "解压后的文件路径";decompressGZipFile(gzipFile, outputFile);}
}

通过GZIPInputStream,咱们可以轻松将GZip文件解压缩回原始格式。这在处理从网络下载的压缩内容时非常有用。

GZip的优势在于其压缩效率和速度,尤其是在网络传输中。它能够有效减少传输时间和带宽使用,这对于提升用户体验和减少服务器负载都至关重要。然而,GZip也有局限,主要是它仅适用于单个文件压缩,不支持像Zip那样直接压缩文件夹。

第5章:Brotli压缩格式

Brotli是一个相对较新的压缩格式,由Google开发,旨在提供比现有技术更高的压缩比,特别是在Web内容的压缩上。它不仅能有效减小HTML、CSS和JavaScript文件的大小,还被设计来优化网络传输,使得网页加载更快,提升用户体验。

Brotli的独特之处在于它的压缩算法。它使用了一种高效的数据压缩技术,可以达到比GZip更高的压缩率,同时保持了相似的解压速度。这使得Brotli在移动网络环境下尤为有用,因为它可以帮助减少数据使用量,加快页面加载时间。

Java中使用Brotli同样简单,但需要注意的是,Java标准库中并没有直接支持Brotli。不过,有第三方库如Google的Brotli Java库,可以让我们轻松地在Java项目中使用Brotli压缩和解压缩。下面,小黑将演示如何在Java中使用这个第三方库来压缩和解压缩数据。

首先,咱们需要添加Brotli的依赖到项目中。如果你使用的是Maven,可以在pom.xml文件中添加如下依赖:

<dependency><groupId>org.brotli</groupId><artifactId>dec</artifactId><version>最新版本号</version>
</dependency>

接下来,让我们看看如何使用Brotli进行数据压缩:

import org.brotli.dec.BrotliInputStream;
import org.brotli.enc.BrotliOutputStream;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class BrotliCompressor {public static void compressFile(String inputFilePath, String outputFilePath) {try (FileInputStream fis = new FileInputStream(inputFilePath);FileOutputStream fos = new FileOutputStream(outputFilePath);BrotliOutputStream bros = new BrotliOutputStream(fos)) {byte[] buffer = new byte[1024];int len;while ((len = fis.read(buffer)) > 0) {bros.write(buffer, 0, len);}System.out.println("Brotli压缩完成,输出文件:" + outputFilePath);} catch (IOException e) {System.out.println("Brotli压缩过程中出错:" + e.getMessage());}}public static void main(String[] args) {String sourceFile = "需要压缩的文件路径";String brotliCompressedFile = "压缩后的文件路径.br";compressFile(sourceFile, brotliCompressedFile);}
}

和Zip、GZip相比,Brotli在实现上需要依赖外部库,但这并不影响它成为Web性能优化的有力工具。通过上面的示例,咱们可以看到,使用Brotli进行文件压缩是直接且简单的。

Brotli的优点显而易见:更高的压缩率意味着更小的文件大小和更快的传输速度。它特别适合于Web内容的压缩,无论是静态文件还是API响应,都能从中受益。此外,Brotli还支持多种压缩级别,让开发者可以根据需求在压缩效率和速度之间做出权衡。

Brotli的普及程度还不及Zip和GZip,特别是在老旧系统中,可能需要额外的步骤来支持Brotli压缩。但随着网络环境对性能的要求越来越高,Brotli无疑是未来Web优化的一个重要方向。

第6章:压缩技术的选择指南

在前面的章节中,小黑介绍了三种流行的压缩技术:Zip、GZip和Brotli。每种技术都有其独特的优势和适用场景。那么,在面对不同的需求时,咱们应该如何选择合适的压缩格式呢?这一章,小黑将带领大家探讨如何根据具体的需求和应用场景,做出明智的选择。

需求分析

首先,明确你的需求是压缩技术选择的基础。咱们需要考虑的几个关键点包括:

  • 文件类型和大小:不同的压缩技术对不同类型和大小的文件的压缩效率可能有显著差异。
  • 压缩和解压速度:某些应用场景下,压缩和解压速度极为关键。
  • 压缩率:在存储和传输成本敏感的场景下,高压缩率尤为重要。
  • 兼容性:考虑目标平台或用户是否支持特定的压缩格式。
场景应用
  • Web内容传输:对于Web服务器和客户端传输HTML、CSS和JavaScript等静态资源,GZip是传统的选择,因为它被广泛支持且能够提供良好的压缩效率。然而,如果最大化压缩率和速度是首要考虑,Brotli可能是更优的选择,尤其是在支持最新Web标准的环境中。
  • 大型文件或数据归档:当需要压缩大型文件或进行数据归档时,Zip格式因其广泛的支持和灵活性(如支持密码保护)而成为一个不错的选择。它允许将多个文件和目录打包成单一文件,便于管理和传输。
  • 程序和系统间的数据交换:如果是在不同程序或系统间交换数据,考虑使用GZip,特别是当交换的数据量大且需要快速压缩和解压时。
压缩效率和速度的权衡

在选择压缩技术时,往往需要在压缩效率(即压缩率)和速度之间做出权衡。一般而言:

  • Brotli提供了较高的压缩率,非常适合网络传输,尤其是在带宽有限的情况下。但是,它的压缩和解压速度可能略逊于GZip。
  • GZip则在压缩速度和效率之间提供了一个平衡点,对于需要较快压缩和解压速度的场景非常适合。
  • Zip格式则更多地被用于文件和目录的打包和存储,支持的特性使其在多文件处理和分布式存储场景下表现出色。
结论

选择正确的压缩技术,关键在于理解各种技术的优势、局限和最适用场景。对于Web开发者而言,Brotli和GZip是提升页面加载速度和优化用户体验的重要工具。对于需要高度兼容性和灵活性的场景,Zip可能是更好的选择。最终,合理的选择应基于对项目需求、目标用户和运行环境。

第7章:Java中实现高效数据压缩的最佳实践

在Java中实施数据压缩时,了解一些最佳实践可以帮助小黑提升压缩效率,确保压缩过程既快速又稳定。本章将探讨一些关键的技巧和策略,从而在使用Zip、GZip或Brotli等技术时能够获得最佳的性能。

使用多线程加速压缩过程

对于处理大型文件或大量数据的场景,压缩过程可能相当耗时。在这种情况下,利用多线程可以显著提升压缩速度。通过并行处理数据,小黑可以充分利用现代多核CPU的计算能力,从而加快压缩任务的完成时间。

例如,如果小黑正在使用Zip对多个文件进行压缩,可以为每个文件分配一个独立的线程进行压缩,然后将所有压缩后的数据汇总到一个Zip文件中。这样不仅提高了压缩速度,也使程序的整体性能得到了优化。

内存管理

在进行数据压缩时,合理的内存管理同样重要。特别是在处理大文件或大量数据时,避免一次性将所有数据加载到内存中是避免内存溢出的关键。小黑可以采用分批处理的方式,即一次只处理文件的一部分,这样既可以减少内存占用,又能保持程序的响应性。

此外,使用缓冲区(Buffer)也是一个好方法。例如,在读写文件时使用BufferedInputStreamBufferedOutputStream,可以减少对磁盘的读写次数,从而提高效率。

错误处理

鲁棒的错误处理机制是高效数据压缩不可或缺的一部分。在压缩过程中,可能会遇到各种意外情况,比如文件损坏、磁盘空间不足等。小黑需要确保程序能够妥善处理这些异常情况,比如通过捕获和记录异常信息,甚至是提供恢复机制,以保证程序的稳定运行。

示例:使用多线程进行Zip压缩

下面是一个简化的示例,展示了如何在Java中使用多线程对多个文件进行Zip压缩:

import java.io.*;
import java.util.concurrent.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;public class ConcurrentZipCompressor {private static final ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());public static void compressFiles(String[] filePaths, String zipFilePath) {try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFilePath))) {for (String filePath : filePaths) {executor.submit(() -> {try {FileInputStream fis = new FileInputStream(filePath);ZipEntry zipEntry = new ZipEntry(new File(filePath).getName());synchronized (zos) {zos.putNextEntry(zipEntry);byte[] bytes = new byte[1024];int length;while ((length = fis.read(bytes)) >= 0) {zos.write(bytes, 0, length);}zos.closeEntry();}fis.close();} catch (IOException e) {e.printStackTrace();}});}executor.shutdown();executor.awaitTermination(1, TimeUnit.HOURS);} catch (IOException | InterruptedException e) {e.printStackTrace();}}public static void main(String[] args) {String[] filesToCompress = {"path/to/file1", "path/to/file2", "path/to/file3"};String zipFile = "path/to/output.zip";compressFiles(filesToCompress, zipFile);}
}

第8章:结语

经过前面几章的深入探讨,小黑希望咱们对Java中的数据压缩技术——Zip、GZip和Brotli有了更全面的了解。每种技术都有其独到之处,适用于不同的场景和需求。从Zip的广泛兼容性和灵活性,到GZip在Web传输中的高效表现,再到Brotli的先进压缩算法和卓越性能,咱们见证了数据压缩技术的发展与应用。

在今天的数字时代,数据量呈爆炸性增长,有效的数据压缩技术变得越来越重要。它们不仅能帮助节省宝贵的存储空间,还能加快数据传输速度,提高应用程序的性能和用户体验。作为Java程序员,掌握这些技术,能够让小黑在工作中游刃有余,面对各种挑战。

压缩技术的选择和应用是一门艺术,也是一门科学。选择哪种压缩格式,如何平衡压缩率和压缩速度,如何实现高效的压缩和解压缩,这些都需要根据具体的项目需求和环境来决定。小黑希望通过本系列文章,能够为咱们提供一份实用的指南,帮助咱们在项目中做出最佳的技术选择。

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

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

相关文章

SpringBoot+Ajax+redis实现隐藏重要接口地址

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》《项目实战》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 …

九型人格测试,8号领袖型人格的职业分析

8号人格&#xff0c;也叫领袖型人格&#xff0c;在九型人格中间&#xff0c;是一种天生领导的存在。他们生性开朗&#xff0c;能够和其他人建立良好的关系&#xff0c;为人不拘小节&#xff0c;遇强则强&#xff0c;坚守心中的理想和正义。不喜欢被人控制&#xff0c;喜欢自己当…

Java并发-并发模型

可以使用不同的并发模型来实现并发系统。一并发模型指定的系统协作线程如何完成他们给予的任务。不同的并发模型以不同的方式拆分任务&#xff0c;线程可以以不同的方式进行通信和协作。本并发模型教程将更深入地介绍撰写本文时&#xff08;2015年至2019年&#xff09;使用的最…

大模型时代,华为与中软国际携手“打通AI落地应用最后一公里”

文 | 智能相对论 作者 | 叶远风 大模型驱动千行百业智能化变革已经成为广泛共识&#xff0c;下一步的问题是&#xff0c;企业要如何更好地推进&#xff1f; 近日&#xff0c;“2024中关村论坛系列活动——第二届北京人工智能产业创新发展大会”在北京国家会议中心成功举办&a…

yudao-cloud 学习笔记

前端代码 浏览器打开 https://cloud.iocoder.cn/intro/ F12 执行代码 var aaa $(".sidebar-group-items").find("a"); var ll[]; var tt[]; for(var i0;i<aaa.length;i ){ ll.push("https://doc.iocoder.cn" $(aaa[i]).attr("href&quo…

Hi3516DV500+SC2210 AIISP 黑光相机

1. Hi3516DV500 Hi3516DV500是一颗面向行业市场推出的高清智能网络摄像头SoC。该芯片最高支持2路sensor输入&#xff0c;支持最高5M30fps的ISP图像处理能力&#xff0c;支持2F WDR、多级降噪、六轴防抖、多光谱融合等多种传统图像增强和处理算法&#xff0c;支持通过AI算法对输…

第11周,第三期技术动态

大家好&#xff0c;才是真的好。 真没想到&#xff0c;本周是今年第十一周&#xff0c;2024年还有不到三百天就结束了。 今天周五&#xff0c;我们继续介绍与Domino相关产品新闻&#xff0c;以及互联网或其他IT行业动态等。 一、在Windows 10和Windows 11上运行Domino和Trav…

案例研究|辛格林电梯借助DataEase实现数据整合与智能展示

辛格林电梯&#xff08;SIGLEN&#xff09;于2012年创立&#xff0c;是电梯领域的领军品牌之一。该公司总部位于广东佛山&#xff0c;是全国首批获得A1级电梯制造资质的企业&#xff0c;拥有省级工程技术研究中心。辛格林电梯专注于研发和生产高品质电梯产品&#xff0c;涵盖别…

一个用libcurl多线程下载断言错误问题的排查

某数据下载程序&#xff0c;相同版本的代码&#xff0c;在64位系统中运行正常&#xff0c;但在32位系统中概率性出现断言错误。一旦出现&#xff0c;程序无法正常继续&#xff0c;即使重启亦不行。从年前会上领导提出要追到根&#xff0c;跟到底&#xff0c;到年后的今天&#…

通过统一规划和团队整合,提升企业财务洞察

在当今快节奏的商业环境中&#xff0c;企业财务职能部门更应该采取更迅速的行动来适应这个社会。大部分企业期待更高效的战略决策&#xff0c;尤其是面临海量数据信息的堆叠。但是企业领导者应该知道&#xff0c;速度本身并不是最终目标&#xff0c;财务团队必须更快地完成工作…

基于springboot的大学生智能消费记账系统的设计与实现(程序+数据库+文档)

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、研究背景…

六种方式,教你在SpringBoot初始化时搞点事情!

前言 在实际工作中总是需要在项目启动时做一些初始化的操作&#xff0c;比如初始化线程池、提前加载好加密证书....... 那么经典问题来了&#xff0c;这也是面试官经常会问到的一个问题&#xff1a;有哪些手段在Spring Boot 项目启动的时候做一些事情&#xff1f; 方法有很多…

火爆新品推荐!AI大模型应用和ai 数字人开发!

火爆新品来袭&#xff01;AI大模型应用和AI数字人开发成为当下科技界的热点话题。随着人工智能技术的不断发展&#xff0c;AI大模型应用已经开始在各个领域大放异彩。从医疗诊断到金融风控&#xff0c;从自然语言处理到智能推荐&#xff0c;AI大模型的应用场景愈发广泛&#xf…

PyCharm 显示无法加载文件 D:\...,因为在此系统上禁止运行脚本。

PyCharm 显示无法加载文件 D:…&#xff0c;因为在此系统上禁止运行脚本。 PyCharm 显示 无法加载文件 D:\python test\AI_CV\venv\Scripts\activate.ps1&#xff0c;因为在此系统上禁止运行脚本。 解决方法&#xff1a; winx点击Windows PowerShell&#xff08;管理员&#…

基于yolov5的SAR舰船检测系统,可进行图像目标检测,也可进行视屏和摄像检测(pytorch框架)【python源码+UI界面+功能源码详解】

功能演示&#xff1a; 基于yolov5的SAR舰船检测系统&#xff0c;系统既能够实现图像检测&#xff0c;也可以进行视屏和摄像实时检测_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov5的SAR舰船检测系统是在pytorch框架下实现的&#xff0c;这是一个完整的项目&…

爬虫实战——巴黎圣母院新闻【内附超详细教程,你上你也行】

文章目录 发现宝藏一、 目标二、简单分析网页1. 寻找所有新闻2. 分析模块、版面和文章 三、爬取新闻1. 爬取模块2. 爬取版面3. 爬取文章 四、完整代码五、效果展示 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不…

【python爬虫】免费爬取网易云音乐完整教程(附带源码)

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 所属专栏:爬虫实战,零基础、进阶教学 景天的主页:景天科技苑 文章目录 网易云逆向网易云逆向 https://music.163.com/ 下载云音乐 胡广生等,可以选择自己喜欢的歌曲 首先,我们可以先根据…

使用Pytorch导出自定义ONNX算子

在实际部署模型时有时可能会遇到想用的算子无法导出onnx&#xff0c;但实际部署的框架是支持该算子的。此时可以通过自定义onnx算子的方式导出onnx模型&#xff08;注&#xff1a;自定义onnx算子导出onnx模型后是无法使用onnxruntime推理的&#xff09;。下面给出个具体应用中的…

机器学习中的线性代数

基础知识的的复习: 线性代数——深度学习花书第二章 - 知乎 矩阵分解 特征值分解。 PCA(Principal Component Analysis)分解,作用:降维、压缩。 SVD(Singular Value Decomposition)分解,也叫奇异值分解。 矩阵分解的主要应用是:降维、聚类分析、数据预处理、低维度特征学…

Keepalive 解决nginx 的高可用问题

一 说明 keepalived利用 VRRP Script 技术&#xff0c;可以调用外部的辅助脚本进行资源监控&#xff0c;并根据监控的结果实现优先动态调整&#xff0c;从而实现其它应用的高可用性功能 参考配置文件&#xff1a; /usr/share/doc/keepalived/keepalived.conf.vrrp.localche…