自由学习记录(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以其精巧的体积和高效率著称,它们不需要依赖庞大的服务器资源,…...

精通 Python 网络安全(一)
前言 最近,Python 开始受到越来越多的关注,最新的 Python 更新添加了许多可用于执行关键任务的包。我们的主要目标是帮助您利用 Python 包来检测和利用漏洞,并解决网络挑战。 本书将首先带您了解与网络和安全相关的 Python 脚本和库。然后&…...

【python自动化二】pytest集成allure生成测试报告
pytest本身不会直接生成测试报告,而allure是一种生成测试报告的公共插件,可与多种测试框架配合生成测试报告,本文介绍下如何集成allure生成测试报告。 1.allure安装 1.安装allure-pytest 先安装allure的pytest插件,用于在pytes…...

网络版本的通讯录青春版(protobuf)
环境搭建 Protobuf 还常⽤于通讯协议、服务端数据交换场景。 因为我们主要目的只是为了学习protobuf,因此对于客户端,原本应该具备: 新增⼀个联系⼈ ◦ 删除⼀个联系⼈ ◦ 查询通讯录列表 ◦ 查询⼀个联系⼈的详细信息 这样四个功能。 …...

开源模型应用落地-安全合规篇-用户输入价值观判断(三)
一、前言 在深度合规功能中,对用户输入内容的价值观判断具有重要意义。这一功能不仅仅是对信息合法性和合规性的简单审核,更是对信息背后隐含的伦理道德和社会责任的深刻洞察。通过对价值观的判断,系统能够识别可能引发不当影响或冲突的内容,从而为用户提供更安全、更和谐的…...

神经网络入门实战:(十四)pytorch 官网内置的 CIFAR10 数据集,及其网络模型
(一) pytorch 官网内置的网络模型 图像处理: Models and pre-trained weights — Torchvision 0.20 documentation (二) CIFAR10数据集的分类网络模型(仅前向传播): 下方的网络模型图片有误,已做修改,具…...

【Rust在WASM中实现pdf文件的生成】
Rust在WASM中实现pdf文件的生成 前言概念和依赖问题描述分步实现pdf转Blob生成URL两种方式利用localstorage传递参数处理图片Vec<u8>到pdf格式的Vec<u8>使用rust创建iframe显示pdf的Blob最后 前言 实现了一个通用的前端jpg转pdf的wasm,因为动态响应框架无法直接打…...

在MySQL中执行sum case when报错:SUM does not exist
1. 报错 在pgsql中能正常运行的一段SQL在MySQL中运行的时候报错了: SELECT DATE( hr.handle_time ) AS statsDate,SUM ( CASE WHEN hma.app_type IN ( 2, 5 ) THEN ch_money ELSE 0 END ) AS aliPayAmt,SUM ( CASE WHEN hma.app_type IN ( 1, 4 ) THEN ch_money EL…...

【openssl】相关指令
熟悉下相关概念 x509:证书标准pem和der:两种(包括公私钥、证书签名请求、证书等内容的)的格式,前者是文本形式,linux常用,后者是二进制形式,windows常用,仅仅是格式&…...

实例分割详解
实例分割详解 引言 实例分割是计算机视觉领域的一项复杂任务,它要求模型能够识别图像中不同类别的对象,并对每个单独的对象进行像素级别的分类。与语义分割不同的是,实例分割不仅要区分不同的类别,还要识别同一类别中的不同个体…...

D87【python 接口自动化学习】- pytest基础用法
day87 pytest运行参数 -m -k 学习日期:20241203 学习目标:pytest基础用法 -- pytest运行参数-m -k 学习笔记: 常用运行参数 pytest运行参数-m -k pytest -m 执行特定的测试用例,markers最好使用英文 [pytest] testpaths./te…...