自由学习记录(29)
FileStream
FileStream 是 .NET 中用于文件操作的重要类,位于 System.IO 命名空间中。它提供了对文件的同步和异步读写操作。以下是它的方法签名和重载的详细介绍:
构造函数签名和重载
FileStream 提供多个构造函数,允许在创建实例时指定文件路径、文件模式、访问权限、共享方式等。
常见构造函数
// 基本构造函数
FileStream(string path, FileMode mode);// 支持指定访问权限和共享方式
FileStream(string path, FileMode mode, FileAccess access);// 支持更多高级选项,如缓冲区大小和文件选项
FileStream(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, FileOptions options);
示例
using System.IO;// 只读方式打开文件
FileStream fs1 = new FileStream("example.txt", FileMode.Open, FileAccess.Read);// 读写模式打开文件,并允许其他进程共享读取
FileStream fs2 = new FileStream("example.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);// 指定缓冲区大小和异步操作
FileStream fs3 = new FileStream("example.txt", FileMode.Create, FileAccess.Write, FileShare.None, 4096, FileOptions.Asynchronous);
内置的主要方法
public override int Read(byte[] array, int offset, int count);
public override void Write(byte[] array, int offset, int count);
public override long Seek(long offset, SeekOrigin origin);
public override void Flush();
public override Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken = default);
public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken = default);
public override void Close();
protected override void Dispose(bool disposing);
public override void SetLength(long value);
long fileLength = fs.Length;
fs.Position = 0; // 设置流的位置到开头
FileStream 中,数据写入文件的方向和位置是由 Position 属性和 Seek 方法控制的
默认情况下,FileStream 在打开时会将文件指针定位到文件的开头,除非你指定了其他模式(如追加模式)
Position 属性表示文件流中的当前字节位置(字节是最底层单位),即下一个要写入或读取的字节位置
可以直接修改 Position 属性来改变写入数据的起始位置
不同于字符串的HELLOaaca,每个字符是多字节转化后的高级对象
Position的最底层,一个字节一个字节的读
byte0 byte1 byte2 byte3 byte4 byte5 byte6 byte7 ....
FileMode.Create:创建新文件,如果文件已存在,覆盖文件。FileMode.Append:将写入数据追加到文件的末尾,即使你改变了Position,数据也会追加到文件末尾。FileMode.OpenOrCreate:打开文件,如果文件不存在,则创建新文件。FileMode.Open:打开文件,要求文件存在。

fs 的 Write 和 Read 方法是相对于 fs 自身的当前位置进行操作的(Position 属性)
FileStream 对象有一个 Position 属性,它表示流中的当前字节位置。每次读取或写入数据时,都是从这个位置开始的。Position 会在读写操作后自动更新。
写入 (Write):写入数据时,数据会从当前位置开始,覆盖当前位置开始的字节。如果 Position 指向文件的末尾,则数据会追加到文件末尾。
读取 (Read):读取数据时,数据会从当前位置开始,读取的字节数由参数指定。读取后,Position 会自动移动到读取数据后的下一个位置。
走一遍流程(1)
有了表的每一列的对应数据结构类
也有了装这些单个数据结构类的字典类
之后
生成二进制文件了

先确认存储的位置,为streamingAssets
StreamingAssets 文件夹在 Unity 中是一个特殊的目录,主要用于存放游戏中的静态文件(如配置文件、音视频资源等)
与 Unity 的 Resources 不同,StreamingAssets 中的文件不会被 Unity 的资源打包工具压缩或转换,而是以原始格式保留。
不论是 PC、移动端(iOS/Android)还是 WebGL,StreamingAssets 的文件都被保留并打包到特定的路径中,能够直接访问。

安全检查文件夹的存在情况

文件流是贴在具体的文件上的
关于byte
“位”(bit)是现代计算机存储和处理信息的最小单位。比“位”更底层的概念主要涉及到物理实现和理论基础,所以要对计算机的深度在软件层面上,位已经是绝对终点了
byte是八个位,通过一定的规则构成的一个对象,也就是说byte就是次绝对终点,而byte可以涵盖的数据范围更广,所以会更容易在网络通信和其他数据传输中发挥最底层的运输单元
不用担心会时不时把byte又拆成分散的位去操作什么的,从宏观角度来讲,这种操作的出现可能无限接近0
基本数据类型的重新表述
字节为数据基本单位
int 是一种4 字节单位信息量 封装成的 数据类型。
byte 是 8 位无符号整数
byte所含信息量 可以表示一个 ASCII 范围 0-127
字符占用的字节数
- 不同编码方式下,字符可能占用不同数量的
byte:- ASCII 编码:1 个字符占用 1 个
byte。 - UTF-8 编码:普通英文字母占用 1 个
byte,中文字符可能占用 3 个byte。 - UTF-16 编码:大多数字符占用 2 个
byte。
- ASCII 编码:1 个字符占用 1 个
BitConverter
BitConverter 是 C# 中的一个静态类,位于命名空间 System 下,用于在基础数据类型和字节数组之间进行转换。它特别适用于二进制序列化和反序列化的场景。
将数值类型(如 int, double, float, long)转换为字节数组。
BitConverter 仅支持基础数值类型(如 int, float, double, bool 等),不支持自定义复杂对象的直接转换。
BitConverter.GetBytes() 方法
使用 BitConverter.GetBytes() 方法将基本数据类型转换为字节数组。
只能接收一个参数,不支持同时传入多个参数,也不能直接处理数组或复杂对象
// 方法所在命名空间
namespace System
{public static class BitConverter{public static byte[] GetBytes(bool value);public static byte[] GetBytes(char value);public static byte[] GetBytes(double value);public static byte[] GetBytes(short value);public static byte[] GetBytes(int value);public static byte[] GetBytes(long value);public static byte[] GetBytes(float value);public static byte[] GetBytes(ushort value);public static byte[] GetBytes(uint value);public static byte[] GetBytes(ulong value);}
}
BitConverter.To 系列方法(tostring不算)
使用 BitConverter.ToInt32(), BitConverter.ToDouble() 等方法,将字节数组转换回基本数据类型(注意这里不包含字符串)。
namespace System
{public static class BitConverter{public static bool ToBoolean(byte[] value, int startIndex);public static char ToChar(byte[] value, int startIndex);public static double ToDouble(byte[] value, int startIndex);public static short ToInt16(byte[] value, int startIndex);public static int ToInt32(byte[] value, int startIndex);public static long ToInt64(byte[] value, int startIndex);public static float ToSingle(byte[] value, int startIndex);public static ushort ToUInt16(byte[] value, int startIndex);public static uint ToUInt32(byte[] value, int startIndex);public static ulong ToUInt64(byte[] value, int startIndex);}
}
BitConverter.To 系列方法没有重载,每种方法都专门用于一种目标数据类型,接收相同的两个参数:
byte[] value:- 要解析的字节数组。
int startIndex:- 字节数组中起始解析的位置。
参数要求
-
字节数组的长度:
数组从指定的startIndex开始,必须至少包含目标类型所需的字节数。例如:ToInt32需要 4 个字节。ToDouble需要 8 个字节。
否则,会抛出
ArgumentOutOfRangeException。


字节序决定了数据的高位字节和低位字节的存储顺序。BitConverter 的默认行为依赖于系统的字节序:
- 小端序 (Little-Endian):低位字节在前,高位字节在后。
- 大端序 (Big-Endian):高位字节在前,低位字节在后。
如果目标环境可能使用不同的字节序(如网络通信或跨平台开发),需要手动调整字节顺序。
BitConverter.ToString()
BitConverter.ToString()方法是完全自定化的转字符串方式,不是把byte转ASCII码去对应
而是全部转16进制并且用短横线-连接起来,最后返回(也是有点变态了)
不涉及编码翻译(编码翻译是:通过抓字节,然后按字符集的规则翻译成对应的字符),仅仅是字节值的格式化输出工具


如果你希望将字节数组翻译成对应的 ASCII 或其他编码的字符,应该使用 System.Text.Encoding
byte[] bytes = { 72, 101, 108, 108, 111 }; // 字节数组表示 ASCII 字符 "Hello"string text = System.Text.Encoding.ASCII.GetString(bytes);
Console.WriteLine(text); // 输出 "Hello"


f2变量重命名

默认情况下,Directory.GetFiles 不会获取子目录中的文件。它只会返回当前目录中的文件。
Excel源文件->C#中每行的数据
DataTable、DataTableCollection
所属命名空间: System.Data
DataTable核心属性和方法:
Rows:访问数据表中的行。Columns:访问数据表中的列。AcceptChanges()和RejectChanges():管理数据表中的更改。
DataTableCollection核心属性和方法:
Count:返回集合中的表数量。Add():向集合中添加一个新的DataTable。Remove():从集合中移除一个DataTable。- 索引器(
[int index]或[string name]):通过索引或名称访问指定的DataTable。
DataTableCollection 是一个 DataSet 中包含的 DataTable 对象的集合,通过 DataSet.Tables 属性访问。
当需要操作多个 DataTable 时,DataTableCollection 提供一个统一的接口。
每个 DataTable 对象代表一个表格数据。
IExcelDataReader、ExcelReaderFactory
- 所属命名空间:
ExcelDataReader IExcelDataReader读取 Excel 文件中的数据。- 它是一个流式读取器,能够高效地从 Excel 文件中读取数据。
- 支持
.xls和.xlsx文件格式。
ExcelReaderFactory是一个工厂类,用于创建IExcelDataReader的实例
核心方法和功能:
Read():逐行读取数据。GetValue(int columnIndex):获取当前行中指定列的数据。FieldCount和Depth:提供有关表格结构的元数据。
ExcelReaderFactory初始化 IExcelDataReader 对象
IExcelDataReader直接从 Excel 文件中读取数据(通常作为数据源),结合 ExcelDataReader 提供的功能将数据转换为其他格式(如 DataSet 或 DataTable)。
它们的关系和数据流
它们之间的关系可以理解为 Excel 文件到内存中的表格数据的转换过程:
-
ExcelReaderFactory:
- 创建一个 流式读取 Excel 源文件的
IExcelDataReader实例。
- 创建一个 流式读取 Excel 源文件的
-
IExcelDataReader:
- 读取 Excel 文件的内容(逐行、逐列读取),并将其表示为
DataSet或DataTable格式。
- 读取 Excel 文件的内容(逐行、逐列读取),并将其表示为
-
DataSet 和 DataTableCollection:
- 调用
IExcelDataReader.AsDataSet()方法时,Excel 文件中的整体数据会被转换成一个DataSet,其中每个工作表成为一个DataTable,存储在DataSet.Tables中。
- 调用
-
DataTable:
-
DataSet.Tables集合中的单个表的对象类,访问具体的工作表数据。
-
示例代码:将 Excel 文件读入 DataTable
以下是它们协同工作的一个典型示例:
using System;
using System.Data;
using System.IO;
using ExcelDataReader;class Program
{static void Main(){string filePath = @"C:\example.xlsx";// 打开文件流FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);// 创建 IExcelDataReaderIExcelDataReader reader = ExcelReaderFactory.CreateReader(stream);// 将 Excel 数据转为 DataSetDataSet dataSet = reader.AsDataSet();// 获取所有工作表的集合DataTableCollection tables = dataSet.Tables;// 选择第一个工作表DataTable table = tables[0];// 输出表格内容foreach (DataRow row in table.Rows){foreach (object cell in row.ItemArray){Console.Write($"{cell}\t");}Console.WriteLine();}// 释放资源reader.Close();stream.Close();}
}
总结关系
ExcelReaderFactory: 创建用于读取 Excel 源文件的流的读取器(IExcelDataReader)。IExcelDataReader: 读取器,将流读成IO里的DataSet类对象。DataTableCollection:DataSet中包含的多个工作表集合。DataTable: 单个工作表对象,可以对其进行操作和分析。
excel源文件
v
c#基础流生成
v
流读取(DataReader)
v
DataSet
->DataTableCollection
->DataTable
这四者形成了从 Excel 文件读取到内存数据结构操作的完整工作流。
是否可以通过 DataSet 修改 Excel 源文件?
不能直接通过 DataSet 修改 Excel 文件。以下是原因和工作机制的分析:
工作机制
-
ExcelReaderFactory和IExcelDataReader:
这些工具主要用于读取 Excel 文件,将其内容加载到DataSet或DataTable中。
数据读取是一次性操作,将文件中的数据复制到内存中,之后的操作仅限于内存数据,不会自动同步到原文件。 -
DataSet的特性:DataSet是一个内存中的数据存储结构,与数据源(如 Excel、数据库等)是分离的。- 在
DataSet中对数据的修改,不会自动反映到原始数据源(如 Excel 文件)。
Directory.CreateDirectory(path)
用于创建指定路径的目录的方法。它的返回值是一个 DirectoryInfo 对象。
返回值的类型
System.IO.DirectoryInfo
DirectoryInfo 是什么?
DirectoryInfo是 .NET 中的一个类,用于表示文件系统中的目录。- 它提供了对目录的一些元信息(如名称、路径、父目录等)的访问,同时提供了操作目录的方法(如创建、删除、移动等)。
返回的内容
- 如果目录已存在,
CreateDirectory方法不会抛出异常,而是返回一个表示该目录的DirectoryInfo对象。 - 如果目录不存在,会创建该目录及其所有必要的父目录,再返回其
DirectoryInfo对象。
用法示例
using System;
using System.IO;class Program
{static void Main(){string path = @"C:\Example\Subfolder";// 创建目录DirectoryInfo dirInfo = Directory.CreateDirectory(path);// 使用返回的 DirectoryInfo 对象Console.WriteLine($"Directory created: {dirInfo.FullName}");Console.WriteLine($"Root: {dirInfo.Root}");Console.WriteLine($"Parent: {dirInfo.Parent}");Console.WriteLine($"Name: {dirInfo.Name}");}
}
关键点
- 常用属性:
FullName: 目录的完整路径。Name: 目录的名称。Parent: 父目录(DirectoryInfo类型)。Exists: 检查目录是否存在。
- 常用方法:
Create(): 创建目录(如果未存在)。Delete(): 删除目录。EnumerateFiles(): 列举目录中的文件。EnumerateDirectories(): 列举子目录。
异常处理
在使用 Directory.CreateDirectory 时,需要注意以下可能的异常:
ArgumentException:路径格式无效(如包含非法字符)。UnauthorizedAccessException:无权限创建目录。PathTooLongException:路径超出系统支持的最大长度。IOException:一般性的 I/O 错误(如路径指向一个文件而非目录)。


excel的协同开发,表的读取,是完全可控的
第四行直接跳过,需要读取的数据从第五行再开始拿也没问题,第四行完全可以作为注释,备注给别人看

为Unity编辑器的菜单栏增加新的选项
新的选项绑定在静态方法上
在任意一个自己写的类中,写下的静态方法(private也可以),
静态方法上面加上[MenuItem(选项名的重叠/.../.../)]
选项目录不能只有一级
MenuItem特性可以用在任意类中
为新建目录之后立刻刷新Refresh
Directory.CreateDirectory(....path..);
AssetDatabase.Refresh();
Editor文件夹
Editor文件夹可以放在项目的任何文件夹下,可以有多个
放在Editor文件夹下的内容,项目打包时不会打包进项目
打包后,游戏脚本想要访问Editor中的脚本,是访问不了的
异或可以存贮原二进制文件里的所有信息量
概:原数据 ^ byte字节的二进制位(key) = 转位数据(全信息)
异或操作本身具有可逆性,并且不会丢失任何信息。
异或,和当前key的位同的记为0,异的记为1
plus:二进制只有0和1
∴达到了信息量的完全保存
异或的所有情况
存贮的原因,权重并不是完全在原文件的,甚至偏向key的
异或是一个信息联合符号,联系左边的数据,和右边的数据,产生最后的数据
自己给的key是右边的数据,原要操作的数据是左边的数据
“产生最后数据”的规则,又可以达到让信息具有基于key的特异性
- 等长性:输出的结果长度与输入的二进制文件长度相同,信息量保持不变。
- 操作的完备性:异或操作既可以编码(结合一个密钥),也可以解码(使用相同的密钥)。
- 无信息丢失:异或的计算过程是完全可逆的,不涉及任何丢弃或压缩信息的操作。
任意的一个key,为一个字节,每个字节再和199的二进制八位去异或




内存流是先得到字节数组,然后可对字节数组进行一下操作,再压入流中
文件流则是直接压入流中
Flush和Close
下划线Ctrl+ U
加粗:Ctrl+ B
斜体:Ctrl+ I
在C#中,FileStream的Flush和Close方法的作用和区别如下:
1. Flush方法
-
作用:
确保所有Write()的内容都被保存到目标文件中,不停留在内存中的缓冲区。 -
适用场景:
当你需要确保数据被写入到磁盘或目标介质中,而流仍然需要继续使用时,可以调用Flush。 -
注意事项:
- 调用
Flush不会关闭流,也不会释放流的资源。 - 如果只是读取操作,调用
Flush是无效的,因为它主要用于清空写入缓冲区。
- 调用
-
示例:
using (FileStream fs = new FileStream("example.txt", FileMode.Create)) {byte[] data = System.Text.Encoding.UTF8.GetBytes("Hello, World!");fs.Write(data, 0, data.Length);fs.Flush(); // 确保数据立即写入文件// 之后可以继续对fs进行写操作 }
2. Close方法
-
作用:
Close关闭流,并释放所有与流相关的系统资源。它还会自动调用Flush来确保缓冲区中的数据被写入到目标存储。 -
适用场景:
当你确定不再需要使用流时,应调用Close来释放资源。 -
注意事项:
- 调用
Close后,流将无法再次使用,任何操作都会引发异常。 - 从.NET Framework 4.5开始,推荐使用
Dispose(通过using语句)来代替显式调用Close,因为Dispose也会自动调用Close。
- 调用
-
示例:
FileStream fs = new FileStream("example.txt", FileMode.Create); byte[] data = System.Text.Encoding.UTF8.GetBytes("Goodbye, World!"); fs.Write(data, 0, data.Length); fs.Close(); // 关闭流并释放资源
主要区别
| 方面 | Flush | Close |
|---|---|---|
| 功能 | 清空缓冲区,将数据写入存储。 | 关闭流,释放资源,同时清空缓冲区。 |
| 后续操作 | 流仍然可用,能继续读写操作。 | 流被关闭,无法再进行任何操作。 |
| 是否释放资源 | 不释放资源,仅执行写入操作。 | 释放与流相关的所有系统资源。 |
| 是否调用Flush | 仅清空缓冲区,无需再调用。 | 内部会自动调用Flush。 |
相关文章:
自由学习记录(29)
FileStream FileStream 是 .NET 中用于文件操作的重要类,位于 System.IO 命名空间中。它提供了对文件的同步和异步读写操作。以下是它的方法签名和重载的详细介绍: 构造函数签名和重载 FileStream 提供多个构造函数,允许在创建实例时指定文…...
使用YOLO系列txt目标检测标签的滑窗切割:批量处理图像和标签的实用工具
使用YOLO系列txt目标检测标签的滑窗切割:批量处理图像和标签的实用工具 使用YOLO的TXT目标检测标签的滑窗切割:批量处理图像和标签的实用工具背景1. 代码概述2. 滑窗切割算法原理滑窗切割步骤:示例: 3. **代码实现**1. **加载标签…...
架构10-可观测性
零、文章目录 架构10-可观测性 1、可观测性 (1)可观测性的背景 **历史沿革:**可观测性最初由匈牙利数学家鲁道夫卡尔曼提出,用于线性动态控制系统。后来,该概念被引入到计算机科学中。**现代意义:**在分…...
git管理Unity项目的正确方式
git管理Unity项目的正确打开方式 前言:对于刚开始git进行unity项目管理的时候,我采取的方式是全部文件上传,文件数量太多以及上传太大,我尝试过一下几个方法: 利用git的LFS大文件进行传方式,可行但比较麻…...
openssl使用哈希算法生成随机密钥
文章目录 一、openssl中随机数函数**OpenSSL 随机数函数概览**1. **核心随机数函数** **常用函数详解**1. RAND_bytes2. RAND_priv_bytes3. RAND_seed 和 RAND_add4. RAND_status **随机数生成器的熵池****常见用例****注意事项** 二、使用哈希算法生成随机的密钥 一、openssl中…...
将word里自带公式编辑器编辑的公式转换成用mathtype编辑的格式
文章目录 将word里自带公式编辑器编辑的公式转换成用mathtype编辑的格式MathType安装问题MathType30天试用延期MathPage.wll文件找不到问题 将word里自带公式编辑器编辑的公式转换成用mathtype编辑的格式 word自带公式编辑器编辑的公式格式: MathType编辑的格式&a…...
校园失物招领系统基于 SpringBoot:点亮校园归还遗失物之光
2系统开发环境 2.1vue技术 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。 [5] 与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第…...
dhcpd服务器的配置与管理(超详细!!!)
前提条件: (1)虚拟机能够联网(如果nat模式不能联网的看另一期) CentOS7 NAT模式不能联网-CSDN博客 (2)系统是Centos8,因为下载的dhcp-server软件包版本和Centos7不匹配,如果你能成…...
Qml之基本控件
一.Qml常用控件 1.Text(显示普通文本和富文本) 1.1显示普通文本: Window { visible: true width: 320 height: 240 title: qsTr("Hello World") Text { text: "Hello World!" font.family: "Helvetica" font.pointSize: 24 color:…...
【Java从入门到放弃 之 Stream API】
Java Stream API Stream API行为参数化传递代码Lambda表达式Lambda 表达式的语法方法引用 Lambda 表达式的实际应用集合操作并发编程 Lambda 表达式的注意事项总结 Stream API Java8提供了一个全新的API - Stream。引入这个Stream的主要目的,一个是可以支持更好的并…...
Ruby On Rails 笔记1——Rails 入门
突然想跟着官方文档把Ruby On Rails过一遍,把一些有用的记下来就可以一直看了,do它! https://guides.rubyonrails.org/v7.2/ 注:官网是英文文档,我自己翻译了一下,不确保完全准确,只供自己学习开发使用。 …...
高效开发 Python Web 应用:FastAPI 数据验证与响应体设计
高效开发 Python Web 应用:FastAPI 数据验证与响应体设计 目录 🧑💻 FastAPI 的数据验证系统与 Pydantic 模型📦 响应体与模型:定义响应数据的最佳实践🔄 响应模型与查询参数的结合:增强灵活…...
基于“开源 2+1 链动 O2O 商城小程序”的门店拉新策略与流程设计
摘要:在数字化商业浪潮席卷之下,实体门店面临着激烈的市场竞争,如何高效拉新成为关乎门店生存与发展的关键问题。本文聚焦于“开源 21 链动 O2O 商城小程序”,深入探讨结合多种手段的门店拉新策略及详细流程设计。通过剖析到店扫码…...
33.5 remote实战项目之设计prometheus数据源的结构
本节重点介绍 : 项目要求 通过remote read读取prometheus中的数据通过remote write向prometheus中写入数据 准备工作 新建项目 prome_remote_read_write设计prometheus 数据源的结构初始化 项目要求 通过remote read读取prometheus中的数据通过remote write向prometheus中写…...
微服务springboot详细解析(一)
目录 1.Spring概述 2.什么是SpringBoot? 3.第一个SpringBoot程序 4.配置参数优先级 5.springboot自动装配原理 6.SpringBootApplication&SpringApplication.run 7.ConfigurationProperties(prefix "") 8.Validated数据校验 29、聊聊该如何写一…...
深入探讨Go语言中的双向链表
简介 双向链表是链表家族中的一种高级结构,每个节点不仅指向下一个节点,还指向上一个节点。今天,我们将学习如何在Go语言中实现和操作这种灵活的数据结构。 双向链表的优缺点 优点: 可以从任一方向遍历链表,灵活性高…...
Fastapi + vue3 自动化测试平台---移动端App自动化篇
概述 好久写文章了,专注于新框架,新UI界面的实践,废话不多说,开搞 技术架构 后端: Fastapi Airtest multiprocessing 前端: 基于 Vue3、Vite、TypeScript、Pinia、Pinia持久化插件、Unocss 和 Elemen…...
ElasticSearch easy-es 聚合函数 group by 混合写法求Top N 词云 分词
1.将用户访问记录表数据同步到ES,并且分词,获取用户访问最多前十条词语。 Elasticsearch、Easy-es 快速入门 SearchAfterPage分页 若依前后端分离 Ruoyi-Vue SpringBoot 使用结巴分词器 <!-- 分词器--><dependency><groupId>com.hua…...
在 ASP.NET C# Web API 中实现 Serilog 以增强请求和响应的日志记录
介绍 日志记录是任何 Web 应用程序的关键方面。它有助于调试、性能监控和了解用户交互。在 ASP.NET C# 中,集成 Serilog 作为记录请求和响应(包括传入和传出的数据)的中间件可以显著提高 Web API 的可观察性和故障排除能力。 在过去的几周里&…...
2024年顶级小型语言模型前15名
本文,我们将深入了解2024年备受瞩目的十五款小型语言模型(SLMs),它们分别是Llama 3.1 8B、Gemma2、Qwen 2、Mistral Nemo、Phi-3.5等。这些SLMs以其精巧的体积和高效率著称,它们不需要依赖庞大的服务器资源,…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

