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

音视频的文件封装——AVI、MP4、MKV

3.MKV (Matroska Video File)

Matroska (俄语: матроска )是一种多媒体封装格式,可把多种不同编码的影像、不同格式的音频、不同语言的字幕封装到一个文件内。也是一种开放源代码的多媒体封装格式。
Matroska 支持多种文件扩展名:
  • .mkv:用于包含至少一个视频轨道的文件,通常还包含音频和字幕轨道。
  • .mka:用于仅包含音频的文件。
  • .mk3d:用于包含立体(3D)视频的文件。
  • .mks:用于仅包含字幕的文件。
  • .webm:通常用于封装VP9视频编码和Opus音频编码

3.1 MKV文件格式

下图为一个简单的 Matroska Video 文件的结构:

1. Header :包含 EBML Extensible Binary Meta Language )版本信息和文件类型(如
Matroska )。
2. Segment :这是 MKV 文件的主要部分,包含以下子部分:
  • Meta Seek Information:快速索引信息,用于定位文件的其他部分。
  • Segment Information:包含文件的基本信息,如标题和唯一ID
  • Tracks:包含音频、视频和字幕轨道的信息,如编码方式、分辨率和采样率。
  • Chapters:定义章节信息,便于快速跳转。
  • Clusters:包含实际的音频和视频数据帧。
  • Cueing Data:用于播放时快速定位特定时间点。
  • Attachments:可以附加任何类型的文件,如图片、网页或程序。
  • Tags:包含文件和各轨道的标签信息,如作者和标题

3.2 MKV的主要结构

MKV 采用可扩展二进制元语言 EBML(Extensible Binary Meta Language) 来描述其文件结构, EBML 用元素(Elements )来描述 EBML 文档,组织结构如下:
3.2.1 Header

假设一个 MKV 文件的开头部分如下:
1A 45 DF A3 93 42 86 81 01 42 F7 81 01 42 F2 81 04 42 F3 81 08 42 82 88 6D 61 74
72 6F 73 6B 61 42 87 81 01 42 85 81 01
解析步骤如下:
1. 1A 45 DF A3 :这是 EBML Header ID
2. 93 :表示接下来的数据长度为 19 字节。
3. 42 86 81 01 EBMLVersion ,值为 1
4. 42 F7 81 01 EBMLReadVersion ,值为 1
5. 42 F2 81 04 EBMLMaxIDLength ,值为 4
6. 42 F3 81 08 EBMLMaxSizeLength ,值为 8
7. 42 82 88 6D 61 74 72 6F 73 6B 61 DocType ,值为 “matroska”
8. 42 87 81 01 DocTypeVersion ,值为 1
9. 42 85 81 01 DocTypeReadVersion ,值为 1

3.2.2 Segment
MKV 文件的 Segment 部分是文件的核心,包含了实际的多媒体数据和相关的元数据。 Segment 部分由多个子元素组成,每个子元素都有特定的功能。

3.2.2.1 SeekHead
Meta Seek Information 包含快速索引信息,用于定位文件的其他部分(如 Track Info Chapters
Tags Cues Attachments 等)。这些位置是在 Segment 中的相对位置。 Meta Seek 这部分内容比不一 定必须有,但是有了它能让你快速的定位到你关心的一些关键信息的位置,而不用按照文件顺序的解析。

3.2.2.2 Segment Information
包含识别文件的信息,包括 Title SegmentUID, 有个比较关心的文件时长信息 Duration 也在这一部分。

3.2.2.3 Track
MKV Matroska )文件中, Track 部分包含了每个独立的音频流、视频流或字幕流的详细信息,如音视频解码器类型、视频分辨率、音频采样率等。

由于 Track 中的参数过多,这里就不一一介绍,详情请阅读 MKV 官方文档 ,下面展示一些关键元素:
1.TrackNumber :用于在块头中使用的轨道编号,占用 1 4 个字节。
2. TrackUID :唯一标识轨道的 ID ,占用 8 个字节( 64 位)。
3. TrackType :轨道类型,占用 1 个字节( 8 位)。
4. FlagEnabled :设置轨道是否可用,占用 1 个字节( 1 位)。
5. FlagDefault :设置该轨道是否应在没有找到匹配用户偏好的语言时激活,占用 1 个字节( 1 位)。
6. FlagForced :设置该轨道在播放期间是否必须激活,占用 1 个字节( 1 位)。
7. FlagLacing :设置轨道是否可能包含使用花边的块,占用 1 个字节( 1 位)。
8. MinCache :播放器在播放期间应能够缓存的最小帧数,占用 4 个字节( 32 位)。
9. MaxCache :存储引用帧和当前帧所需的最大缓存大小,占用 4 个字节( 32 位)。
10. DefaultDuration :每帧的纳秒数,占用 8 个字节( 64 位)。
11. TrackTimecodeScale :应用于此轨道的比例,占用 8 个字节( 64 位)。
12. TrackOffset :要添加到块时间戳的值,占用 8 个字节( 64 位)。
13. MaxBlockAdditionID BlockAddID 的最大值,占用 8 个字节( 64 位)。
14. Name :轨道的名称,占用可变长度。
15. Language :轨道的语言代码,占用 3 个字节( 24 位)。
16. CodecID :用于解码此轨道的编解码器 ID ,占用可变长度。
17. CodecPrivate :特定编解码器的私有数据,占用可变长度。
18. CodecName :编解码器的名称,占用可变长度。
19. CodecDelay :解码器开始输出前的延迟时间,占用 8 个字节( 64 位)。
20. SeekPreRoll :在开始解码前需要预读的时间,占用 8 个字节( 64 位)。
21. Video :视频轨道的特定信息(如宽度、高度、显示宽度、显示高度、显示单位、立体模式等),
每个字段占用的位数不同。
22. Audio :音频轨道的特定信息(如采样率、通道数、位深度等),每个字段占用的位数不同。
23. TrackOverlay :此轨道覆盖的轨道编号,占用 4 个字节( 32 位)。

3.2.2.4 Chapters
Matroska 的章节系统可以包含多个版本( Editions ),每个版本可以由简单章节( Simple Chapters )组成,也可以是更复杂的有序章节(Ordered Chapters )。

1. EditionEntry (版本条目) :
        EditionUID: 版本的唯一标识符。
        EditionFlagDefault: 标记此版本是否为默认版本。只有一个版本应设置为默认。
        EditionFlagOrdered: 标记此版本是否为有序章节版本。
2. ChapterAtom (章节原子) :
        ChapterUID: 章节的唯一标识符。
        ChapterStringUID: 章节的字符串标识符。
        ChapterTimeStart: 章节开始的时间戳。
        ChapterTimeEnd: 章节结束的时间戳。
        ChapterFlagHidden: 标记章节是否隐藏。
        ChapterDisplay: 显示章节信息的元素。   
                ChapString: 章节名称。
                ChapLanguage: 章节语言

        

对于章节有两种分别是:
  • 简单章节(Simple Chapters: 仅使用章节开始时间作为标记点。
  • 有序章节(Ordered Chapters: 使用章节开始和结束时间来定义和安排虚拟时间线。
3.2.2.5 Clusters
Clusters 部分是存储实际音频和视频数据的关键部分。每个 Cluster 包含一个或多个 BlockGroups ,每个BlockGroup包含一个或多个 Block
1 Cluster 内可能有很多个 BlockGroup 组成, BlockGroup 内又由若干个 Block 组成。这些 Block 内就是音视频的帧数据。

1个Cluster并不一定只是音频或者视频。它是由不同的音视频BlockGroup交叉组成。因为多媒体文件中的音视频数据本来就是交叉出现的。

下面对 Cluster 中重要的元素介绍:
  1. Cluster:每个Cluster包含一个时间戳和多个BlockGroups。时间戳表示Cluster中第一个Block播放时间。
  2. TimecodeCluster的时间码,表示Cluster中第一个Block的时间戳。
  3.  BlockGroup:包含一个Block和与该Block相关的任何信息。
  4. Block:实际的音频或视频数据块,包含时间戳、TrackNumber和数据。
  5. ReferenceBlock:用于表示此Block引用的其他Block(例如B帧或P帧)。
  6.  BlockDurationBlock的持续时间。
3.2.2.6 Cueing Data
Cueing Data (索引数据)用于快速定位和访问文件中的特定位置。这些索引使得播放器可以快速跳转到文件中的特定位置,而无需从头开始读取整个文件。

  • CuePoint(索引点):
        CueTime : 关键帧的时间戳。
        CueTrackPositions: 包含多个 CueTrackPosition 元素,每个元素对应一个轨道的索引信
        息。
  • CueTrackPosition(轨道位置): 
        CueTrack: 轨道的唯一标识符。
        CueClusterPosition: 关键帧所在的 Cluster 的位置。
        CueRelativePosition: 关键帧在 Cluster 中的相对位置。
        CueDuration: 关键帧的持续时间(可选)。
        CueBlockNumber: 关键帧的块编号(可选)。
通过 Cueing Data ,播放器可以快速跳转到视频或音频文件中的特定位置,提高播放效率。在播放过程中,播放器可以利用这些索引数据快速找到并解码需要的部分,而不必解析整个文件。
3.2.2.7 Attachments
Attachments (附件)用于包含与视频相关的额外文件。这些附件可以是封面图片、字体文件、字幕文件等,这些文件可以在播放时被使用。
  • FileDescription: 文件的描述信息。
  • FileName: 文件的名称。
  • FileMimeType: 文件的 MIME 类型(例如,image/jpeg, application/x-truetype-font)。
  • FileData: 文件的实际数据,以二进制形式存储。
3.2.2.8 Tags
Tags (标签)用于存储与媒体文件相关的元数据。这些标签可以包含关于文件内容的各种信息,如标题、艺术家、专辑、导演等。
1. Tag (标签) :
Targets (目标) : 指定标签应用于文件的哪个部分。
  • TargetTypeValue: 目标类型的数值表示。
  • TargetType: 目标类型的字符串表示(例如,COLLECTION, ALBUM)。
  • TagTrackUID: 轨道的唯一标识符。
  • TagEditionUID: 版本的唯一标识符。
  • TagChapterUID: 章节的唯一标识符。
  • TagAttachmentUID: 附件的唯一标识符。
2. SimpleTag (简单标签) :
  • TagName: 标签的名称(例如,TITLE, ARTIST)。
  • TagLanguage: 标签的语言(例如,eng)。
  • TagDefault: 标记此标签是否为默认标签。
  • TagString: 标签的值(例如,"Inception", "Hans Zimmer")。
  • TagBinary: 标签的二进制数据(如果适用)。
  • SimpleTag: 可以嵌套其他简单标签
标签可以嵌套,这意味着一个标签可以包含其他标签。例如,一个专辑标签可以包含多个曲目标签,每个曲目标签又可以包含艺术家和标题等信息。

2.3 封装H264码流和AAC码流

使用 FFMPEG 库合成 H264 视频和 AAC 音频,通过重新编码视频流来生成时间戳。
ffmpeg -fflags +genpts -i input.h264 -i input.aac -c:v libx264 -c:a copy
output.mkv

相关文章:

音视频的文件封装——AVI、MP4、MKV

3.MKV (Matroska Video File) Matroska (俄语: матроска )是一种多媒体封装格式,可把多种不同编码的影像、不同格式的音频、不同语言的字幕封装到一个文件内。也是一种开放源代码的多媒体封装格式。 Matroska 支持多种文件…...

讯飞绘镜(ai生成视频)技术浅析(五):视频生成

讯飞绘镜(AI生成视频)是一种先进的AI视频生成技术,能够将静态的分镜画面转换为动态视频,并使画面中的元素按照一定的逻辑和动作进行动态展示。 一、讯飞绘镜视频生成技术概述 讯飞绘镜的视频生成技术主要包含以下几个核心模块: 1.视频生成模型:包括生成对抗网络(GAN)…...

【FPGA】 MIPS 12条整数指令 【3】

实现乘除 修改框架 EX:实现带符号乘除法和无符号乘除法 HiLo寄存器:用于存放乘法和除法的运算结果。Hi、Lo为32bit寄存器。电路描述与实现RegFile思想一致 仿真 代码 DataMem.v include "define.v"; module DataMem(input wire clk,input…...

【补充】RustDesk一键部署及账号登录配置

前言 之前分享的配置rustdesk的帖子只是搭建了一个简易服务器,仅能实现简单的远程桌面功能。在后续的使用中切换设备使用时无法看到之前连接的设备,必须知道每个设备的id号,才能在新设备上连接。数据无法在设备间迁移,感觉很麻烦…...

2025.2.6 数模AI智能体大更新,更专业的比赛辅导,同提示词效果优于gpt-o1/o3mini、deepseek-r1满血

本次更新重新梳理了回复逻辑规则,无任何工作流,一共3.2k字细节描述。具体效果可以看视频,同时也比对了gpt-o1、gpt-o3mini、deepseek-r1-67BI,从数学建模题目解答上来看,目前我的数模AI智能体具有明显优势。 AI智能体优…...

昇腾,Ascend,NPU,mindie,镜像,部署vllm:第3篇,补档,没事可以看看这个readme

文章目录 前言文件位置已改变atb model和mindie的关系前言 在之前的版本中,我们提到了一个帮助文档(Readme),这个文档告诉我们,当时的mindie版本不支持0.5b版本的通义千问2.5 我现在就很好奇,新版的mindie,是否支持0.5b的版本呢? 文件位置已改变 之前的文件位置: …...

PbootCMS 修改跳转提示,修改笑脸时间

在使用时,每次都提示这个: 修改方法: 修改跳转时间:找到 handle.php 文件编辑 ,调整 setTimeout 函数的时间参数。 修改提示文字:编辑 handle.php 文件,修改提示文字的内容。 隐藏提示页面&am…...

Python办公笔记——将csv文件转Json

目录 专栏导读1、背景2、库的安装3、代码1—自定义表头4、代码2—全字段5、代码3—全字段总结 专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——> 一晌…...

25/2/7 <机器人基础>雅可比矩阵计算 雅可比伪逆

雅可比矩阵计算 雅可比矩阵的定义 假设我们有一个简单的两个关节的平面机器人臂,其末端执行器的位置可以表示为: 其中: L1​ 和 L2 是机器人臂的长度。θ1​ 和 θ2是关节的角度。 计算雅可比矩阵 雅可比矩阵 JJ 的定义是将关节速度与末…...

流媒体缓存管理策略

缓存管理策略是指为了优化性能、资源使用和用户体验而对缓存数据进行管理的方法和规则。以下是一些常见的缓存管理策略: 1. LRU(Least Recently Used,最近最少使用) 原理:当缓存满了,需要腾出空间时&…...

【Sql Server】sql server 2019设置远程访问,外网服务器需要设置好安全组入方向规则

大家好,我是,欢迎来到《小5讲堂》。 这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 前言1、无法链接2、数…...

阿里云 | DeepSeek人工智能大模型安装部署

ModelScope是阿里云人工智能大模型开源社区 ModelScope网络链接地址 https://www.modelscope.cn DeepSeek模型库网络链接地址 https://www.modelscope.cn/organization/deepseek-ai 如上所示,在阿里云人工智能大模型开源社区ModelScope中,使用阿里云…...

Spring Test 教程大纲

Spring Test 教程大纲 目标:基于 JUnit 5,系统学习 Spring Test 的核心原理、注解使用、测试框架集成及扩展开发。 第 1 章:Spring Test 简介与核心原理 1.1 Spring Test 的作用与优势 简化 Spring 应用的单元测试与集成测试。核心目标&am…...

MySQL数据库基础(创建/删除 数据库/表)

一、数据库的操作 1.1 显示当前数据库 语法&#xff1a;show databases&#xff1b; <1>show 是一个关键字&#xff0c;表示要执行的操作类型 <2>databases 是复数&#xff0c;表示显示所有数据库 上面的数据库中&#xff0c;除了java113&#xff0c;其它的数据库…...

Llama最新开源大模型Llama3.1

Meta公司于2024年7月23日发布了最新的开源大模型Llama 3.1&#xff0c;这是其在大语言模型领域的重要进展。以下是关于Llama 3.1的详细介绍&#xff1a; 参数规模与训练数据 Llama 3.1拥有4050亿&#xff08;405B&#xff09;参数&#xff0c;是目前开源领域中参数规模最大的…...

PHP 面向对象编程详解

PHP 面向对象编程详解 引言 PHP 作为一种广泛使用的服务器端脚本语言&#xff0c;自诞生以来就以其简洁、易学、高效的特点受到开发者的喜爱。随着互联网技术的不断发展&#xff0c;PHP 也在不断地进化&#xff0c;其中面向对象编程&#xff08;OOP&#xff09;已经成为 PHP …...

YOLOv11-ultralytics-8.3.67部分代码阅读笔记-files.py

files.py ultralytics\utils\files.py 目录 files.py 1.所需的库和模块 2.class WorkingDirectory(contextlib.ContextDecorator): 3.def spaces_in_path(path): 4.def increment_path(path, exist_okFalse, sep"", mkdirFalse): 5.def file_age(path__fi…...

安卓开发,打开PDF文件

1、把PDF文件复制到raw目录下 &#xff08;1&#xff09;新建一个Android Resource Directory (2)Resource type 改成 raw (3) 把PDF文件复制到raw目录下 2、activity_main.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayoutxmlns:and…...

标准模版——添加蜂鸣器及继电器功能模块

一、peripheral.h代码 #include "STC15F2K60S2.H"void Set_Peripheral(unsigned char Buzzer_Status,unsigned char Relay_Status); 二、peripheral.c代码 #include "peripheral.h"void Set_Peripheral(unsigned char Buzzer_Status,unsigned char Rela…...

嵌入式工程师面试经验分享与案例解析

嵌入式工程师岗位受到众多求职者的关注。面试流程严格&#xff0c;技术要求全面&#xff0c;涵盖C/C编程、数据结构与算法、操作系统、嵌入式系统开发、硬件驱动等多个方向。本文将结合真实案例&#xff0c;深入剖析嵌入式工程师的面试流程、常见问题及应对策略&#xff0c;帮助…...

《云夹:高效便捷的书签管理利器》

在信息爆炸的时代&#xff0c;我们每天都会浏览大量的网页&#xff0c;遇到许多有价值的内容。如何高效地管理这些网页书签&#xff0c;以便随时快速访问&#xff0c;成为了一个重要的问题。云夹作为一款出色的书签管理工具&#xff0c;为我们提供了完美的解决方案。 强大的功能…...

ASP.NET Core标识框架Identity

目录 Authentication与Authorization 标识框架&#xff08;Identity&#xff09; Identity框架的使用 初始化 自定义属性 案例一&#xff1a;添加用户、角色 案例二&#xff1a;检查登录用户信息 案例三&#xff1a;实现密码的重置 步骤 Authentication与Authorizatio…...

Web - CSS3过渡与动画

过渡 基本使用 transition过渡属性是css3浓墨重彩的特性&#xff0c;过渡可以为一个元素在不同样式之间变化自动添加补间动画。 过渡从kIE10开始兼容&#xff0c;移动端兼容良好&#xff0c;网页上的动画特效基本都是由JavaScript定时器实现的&#xff0c;现在逐步改为css3过…...

css-根据不同后端返回值返回渲染不同的div样式以及公共组件设定

1.动态绑定 Vue: 使用计算属性 getClassName 来动态计算样式类名&#xff0c;并通过 :class 绑定到 div 元素上。 <template><div :class"getClassName">这是一个根据后端值动态设置样式的 div 元素。</div> </template><script> exp…...

ES6 Set 数据结构用法总结

1. Set 基本概念 Set 是 ES6 提供的新的数据结构&#xff0c;类似于数组&#xff0c;但成员的值都是唯一的&#xff0c;没有重复的值。Set 本身是一个构造函数&#xff0c;用来生成 Set 数据结构。 1.1 基本用法 // 创建一个空Set const set new Set();// 创建一个带有初始…...

Celery任务阻塞问题排查

笔者在工作中经常用到Celery&#xff0c;遇到了2个任务阻塞的问题&#xff0c;分享经验如下。 1 Celery原理 Celery是基于Python开发的分布式任务调度框架&#xff0c;可以将任务发送到若干台机器上&#xff0c;实现多并发调度和计算。Celery的架构主要包含生产者&#xff08…...

巧用DeepSeek,编写CAPL自动化测试脚本

文章目录 前言提问及回答小结 前言 蛇年伊始&#xff0c;火出圈的除了《哪吒2》登顶中国影史票房第一外&#xff0c;科技圈的DeepSeek国产大模型引爆全球&#xff0c;关于在DeepSeek上的提问无奇不有。就车载通信自动化测试&#xff0c;本文也来蹭蹭热度。作为CAN/LIN协议一致…...

【信息系统项目管理师】第21章:项目管理科学基础 详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 21.1 工程经济学21.2 运筹学1.线性规划2.一般的运输问题3.指派问题4.动态规划法5.最小生成树6.博弈论7.决策每年管理科学在综合题里固定是5分,案例分析和论文不考。主要是科学管理相关内容,包括工程经济学、运…...

webpack配置语言之---ts

由于webpack本身不支持ts&#xff0c;如果需要编译ts文件&#xff0c;需要下载相应的loader对ts文件进行编译&#xff0c;以及配置tsconfig.json文件&#xff0c;配置ts的编译选项 1. 安装必要的依赖 首先&#xff0c;确保你已经安装了 Webpack 和 TypeScript。如果还没有安装…...

WPF 进度条(ProgressBar)示例一

本文讲述&#xff1a;WPF 进度条(ProgressBar)简单的样式修改和使用。 进度显示界面&#xff1a;使用UserControl把ProgressBar和进度值以及要显示的内容全部组装在UserControl界面中&#xff0c;方便其他界面直接进行使用。 <UserControl x:Class"DefProcessBarDemo…...

金蛇祈福,鸿运开年!广州白云皮具城2025开市大吉!

锣鼓一响&#xff0c;黄金万两&#xff01;2月6日大年初九&#xff0c;广州白云皮具城举行盛大的醒狮开市仪式&#xff01;象征吉祥如意的醒狮&#xff0c;将好运、财运传递给全体商户和八方来客。 醒狮点睛 金鼓一响黄金万两&#xff0c;十头醒狮登台&#xff0c;董事总经理刘…...

centos虚拟机迁移没有ip的问题

故事背景&#xff0c;我们的centos虚拟机本来是好好的&#xff0c;但是拷贝到其他电脑上就不能分配ip&#xff0c;我个人觉得这个vmware他们软件应该搞定这个啊&#xff0c;因为这个问题是每次都会出现的。 网络选桥接 网络启动失败 service network restart Restarting netw…...

【ESP32cam人脸识别开门及服务器端实战源码】

本项目实现了一个基于ESP32-CAM的实时人脸识别系统&#xff0c;能够通过WiFi进行视频流传输&#xff0c;并在检测到人脸时触发开门指令。系统由两个主要部分组成&#xff1a;video.py&#xff08;后端服务器&#xff09;和 ESP32-CAM.ino&#xff08;ESP32-CAM固件&#xff09;…...

【自开发工具介绍】SQLSERVER的ImpDp和ExpDp工具04

SQLSERVER的ImpDp和ExpDp工具演示 1、指定某些表作为导出对象外 (-exclude_table) 验证用&#xff1a;导出的表&#xff0c;导入到新的数据库 2、指定某些表作为导出对象外 (-exclude_table) 支持模糊检索&#xff0c;可以使用星号 以s开头的表作为导出对象外&#xff0c;…...

什么是中间件中间件有哪些

什么是中间件&#xff1f; 中间件&#xff08;Middleware&#xff09;是指在客户端和服务器之间的一层软件组件&#xff0c;用于处理请求和响应的过程。 中间件是指介于两个不同系统之间的软件组件&#xff0c;它可以在两个系统之间传递、处理、转换数据&#xff0c;以达到协…...

WebSocket connection failed 解决

WebSocket connection failed 解决 前言 这里如果是新手小白不知道 WebSocket 是什么的&#xff1f; 怎么使用的&#xff1f;或者想深入了解的 那可以 点击这里 几分钟带你快速了解并使用&#xff0c;已经一些进阶讲解&#xff1b; WebSocket&#xff0c;多应用于需要双向数据…...

C语言:取出32位数据的高十六位

目录 背景 目标 操作步骤 1. 右移 16 位 2. 掩码操作&#xff08;可选&#xff09; 代码实现 解释&#xff1a; 输出&#xff1a; 总结&#xff1a; 背景 假设我们有一个 32 位的无符号整数&#xff0c;通常它是由 4 个字节组成的。每个字节由 8 位构成&#xff0c;4…...

JUnit 5 条件测试注解详解

JUnit 5 条件测试注解详解 JUnit 5 提供了一系列条件测试注解&#xff0c;允许开发者根据运行时环境、配置或自定义逻辑动态决定是否执行测试。这些注解能有效减少误报&#xff0c;提升测试的灵活性和适应性。以下是所有条件测试注解的详细介绍及示例&#xff1a; 一、条件测试…...

1 Java 基础面试题(上)

文章目录 前言1. Java 中的序列化和反序列化是什么&#xff1f;1.1 序列化&#xff08;Serialization&#xff09;1.2 反序列化&#xff08;Deserialization&#xff09;1.3 serialVersionUID1.4 序列化的应用场景1.5 Transient 关键字 2. 为什么 Java 里面不支持多重继承&…...

个人笔记---关于详解threadlocal 上下文环境存储的最佳数据类型

个人原因很久没有写代码,对于一些基础的数据类型有一些忘记,可以根据gpt和我当时的问答进行复习 关于拦截器,由于在请求的到达controller处理器之前,拦截器(当然过滤器也可以实现,我感觉都差不多)就把上下文设置在了线程副本中,那么这个请求到处理器的这些代码进行查询出来的上…...

JVM监控和管理工具

基础故障处理工具 jps jps(JVM Process Status Tool)&#xff1a;Java虚拟机进程状态工具 功能 1&#xff1a;列出正在运行的虚拟机进程 2&#xff1a;显示虚拟机执行主类(main()方法所在的类) 3&#xff1a;显示进程ID(PID&#xff0c;Process Identifier) 命令格式 jps […...

【数据结构】树哈希

目录 一、树的同构1. 定义2. 具体理解(1) 结点对应(2) 孩子相同(3) 递归性质 3. 示例 二、树哈希1.定义2.哈希过程&#xff08;1&#xff09;叶节点哈希&#xff08;2&#xff09;非叶节点哈希&#xff08;3&#xff09;组合哈希值 3.性质&#xff08;1&#xff09; 唯一性 \re…...

UE5 蓝图学习计划 - Day 12:存储与加载

在游戏开发中&#xff0c;存储&#xff08;Save&#xff09;与加载&#xff08;Load&#xff09; 系统至关重要&#xff0c;玩家需要能够保存游戏进度、角色状态、道具数据等信息&#xff0c;并在下次启动游戏时恢复它们。UE5 提供了 SaveGame 蓝图类&#xff0c;帮助开发者快速…...

18爬虫:关于playwright相关内容的学习

1.如何在python中安装playwright 打开pycharm&#xff0c;进入终端&#xff0c;输入如下的2个命令行代码即可自动完成playwright的安装 pip install playwright ——》在python中安装playwright第三方模块 playwright install ——》安装playwright所需的工具插件和所支持的…...

图解BWT(Burrows-Wheeler Transform) 算法

Burrows-Wheeler Transform (BWT) 是一种数据转换算法, 主要用于数据压缩领域. 它由 Michael Burrows 和 David Wheeler 在 1994 年提出, 广泛应用于无损数据压缩算法(如 bzip2)中. BWT 的核心思想是通过重新排列输入数据, 使得相同的字符更容易聚集在一起, 从而提高后续压缩算…...

CMake轻松实现把编译生成文件分类输出到指定路径,同时又拷贝一份到别的指定路径(Window/Linux通用)

使用CMake管理的C项目工程你是否有以下需求&#xff1a; 1.项目编译时将生成的文件分类自动输出到指定位置&#xff1b; 2.除了上面输出到指定位置以外&#xff0c;还要拷贝一份到指定位置&#xff08;包含头文件&#xff0c;配置文件&#xff0c;第三方依赖库文件等&#xf…...

AJAX笔记原理篇

黑马程序员视频地址&#xff1a; AJAX-Day03-01.XMLHttpRequest_基本使用https://www.bilibili.com/video/BV1MN411y7pw?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes&p33https://www.bilibili.com/video/BV1MN411y7pw?vd_sour…...

C32.【C++ Cont】静态实现双向链表及STL库的list

目录 1.知识回顾 2.静态实现演示图 3.静态实现代码 1.初始双向链表 2.头插 3.遍历链表 4.查找某个值 4.任意位置之后插入元素 5.任意位置之前插入元素 6.删除任意位置的元素 4.STL库的list 1.知识回顾 96.【C语言】数据结构之双向链表的初始化,尾插,打印和尾删 97.【C…...

【Elasticsearch】terms聚合误差问题

Elasticsearch中的聚合查询在某些情况下确实可能存在误差&#xff0c;尤其是在处理分布式数据和大量唯一值时。这种误差主要来源于以下几个方面&#xff1a; 1.分片数据的局部性 Elasticsearch的索引通常被分成多个分片&#xff0c;每个分片独立地计算聚合结果。由于数据在分…...

2-kafka服务端之延时操作实现原理

文章目录 背景案例延时生产实现原理延时拉取实现原理 总结 背景 上篇我们说到了kafka时间轮是延时操作内部实现的重要数据结构&#xff0c;这篇我们来说下kafka内部的延时操作实现原理。这里我们以延时生产和延时拉取为例说明延时操作的实现原理。 案例 延时生产 我们知道如…...