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

自由学习记录(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:打开文件,要求文件存在。

 fsWriteRead 方法是相对于 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

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):获取当前行中指定列的数据。
  • FieldCountDepth:提供有关表格结构的元数据。

ExcelReaderFactory初始化 IExcelDataReader 对象

IExcelDataReader直接从 Excel 文件中读取数据(通常作为数据源),结合 ExcelDataReader 提供的功能将数据转换为其他格式(如 DataSetDataTable


它们的关系和数据流

它们之间的关系可以理解为 Excel 文件到内存中的表格数据的转换过程

  1. ExcelReaderFactory:

    • 创建一个 流式读取 Excel 源文件的IExcelDataReader 实例。
  2. IExcelDataReader:

    • 读取 Excel 文件的内容(逐行、逐列读取),并将其表示为 DataSetDataTable 格式。
  3. DataSet 和 DataTableCollection:

    • 调用 IExcelDataReader.AsDataSet() 方法时,Excel 文件中的整体数据会被转换成一个 DataSet,其中每个工作表成为一个 DataTable存储在 DataSet.Tables 中。
  4. 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 文件。以下是原因和工作机制的分析:

工作机制
  • ExcelReaderFactoryIExcelDataReader
    这些工具主要用于读取 Excel 文件,将其内容加载到 DataSetDataTable 中。
    数据读取是一次性操作,将文件中的数据复制到内存中,之后的操作仅限于内存数据不会自动同步到原文件

  • 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}");}
}

关键点

  1. 常用属性
    • FullName: 目录的完整路径。
    • Name: 目录的名称。
    • Parent: 父目录(DirectoryInfo 类型)。
    • Exists: 检查目录是否存在。
  2. 常用方法
    • 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的二进制八位去异或


内存流是先得到字节数组,然后可对字节数组进行一下操作,再压入流中

文件流则是直接压入流中

FlushClose

下划线Ctrl+ U

加粗:Ctrl+ B
斜体:Ctrl+ I

在C#中,FileStreamFlushClose方法的作用和区别如下:


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(); // 关闭流并释放资源
    

主要区别

方面FlushClose
功能清空缓冲区,将数据写入存储。关闭流,释放资源,同时清空缓冲区。
后续操作流仍然可用,能继续读写操作。流被关闭,无法再进行任何操作。
是否释放资源不释放资源,仅执行写入操作。释放与流相关的所有系统资源。
是否调用Flush仅清空缓冲区,无需再调用。内部会自动调用Flush

相关文章:

自由学习记录(29)

FileStream FileStream 是 .NET 中用于文件操作的重要类&#xff0c;位于 System.IO 命名空间中。它提供了对文件的同步和异步读写操作。以下是它的方法签名和重载的详细介绍&#xff1a; 构造函数签名和重载 FileStream 提供多个构造函数&#xff0c;允许在创建实例时指定文…...

使用YOLO系列txt目标检测标签的滑窗切割:批量处理图像和标签的实用工具

使用YOLO系列txt目标检测标签的滑窗切割&#xff1a;批量处理图像和标签的实用工具 使用YOLO的TXT目标检测标签的滑窗切割&#xff1a;批量处理图像和标签的实用工具背景1. 代码概述2. 滑窗切割算法原理滑窗切割步骤&#xff1a;示例&#xff1a; 3. **代码实现**1. **加载标签…...

架构10-可观测性

零、文章目录 架构10-可观测性 1、可观测性 &#xff08;1&#xff09;可观测性的背景 **历史沿革&#xff1a;**可观测性最初由匈牙利数学家鲁道夫卡尔曼提出&#xff0c;用于线性动态控制系统。后来&#xff0c;该概念被引入到计算机科学中。**现代意义&#xff1a;**在分…...

git管理Unity项目的正确方式

git管理Unity项目的正确打开方式 前言&#xff1a;对于刚开始git进行unity项目管理的时候&#xff0c;我采取的方式是全部文件上传&#xff0c;文件数量太多以及上传太大&#xff0c;我尝试过一下几个方法&#xff1a; 利用git的LFS大文件进行传方式&#xff0c;可行但比较麻…...

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自带公式编辑器编辑的公式格式&#xff1a; MathType编辑的格式&a…...

校园失物招领系统基于 SpringBoot:点亮校园归还遗失物之光

2系统开发环境 2.1vue技术 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。 [5] 与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第…...

dhcpd服务器的配置与管理(超详细!!!)

前提条件&#xff1a; &#xff08;1&#xff09;虚拟机能够联网&#xff08;如果nat模式不能联网的看另一期&#xff09; CentOS7 NAT模式不能联网-CSDN博客 &#xff08;2&#xff09;系统是Centos8&#xff0c;因为下载的dhcp-server软件包版本和Centos7不匹配,如果你能成…...

Qml之基本控件

一.Qml常用控件 1.Text(显示普通文本和富文本) 1.1显示普通文本&#xff1a; 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的主要目的&#xff0c;一个是可以支持更好的并…...

Ruby On Rails 笔记1——Rails 入门

突然想跟着官方文档把Ruby On Rails过一遍&#xff0c;把一些有用的记下来就可以一直看了&#xff0c;do它! https://guides.rubyonrails.org/v7.2/ 注&#xff1a;官网是英文文档&#xff0c;我自己翻译了一下&#xff0c;不确保完全准确&#xff0c;只供自己学习开发使用。 …...

高效开发 Python Web 应用:FastAPI 数据验证与响应体设计

高效开发 Python Web 应用&#xff1a;FastAPI 数据验证与响应体设计 目录 &#x1f9d1;‍&#x1f4bb; FastAPI 的数据验证系统与 Pydantic 模型&#x1f4e6; 响应体与模型&#xff1a;定义响应数据的最佳实践&#x1f504; 响应模型与查询参数的结合&#xff1a;增强灵活…...

基于“开源 2+1 链动 O2O 商城小程序”的门店拉新策略与流程设计

摘要&#xff1a;在数字化商业浪潮席卷之下&#xff0c;实体门店面临着激烈的市场竞争&#xff0c;如何高效拉新成为关乎门店生存与发展的关键问题。本文聚焦于“开源 21 链动 O2O 商城小程序”&#xff0c;深入探讨结合多种手段的门店拉新策略及详细流程设计。通过剖析到店扫码…...

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&#xff1f; 3.第一个SpringBoot程序 4.配置参数优先级 5.springboot自动装配原理 6.SpringBootApplication&SpringApplication.run 7.ConfigurationProperties(prefix "") 8.Validated数据校验 29、聊聊该如何写一…...

深入探讨Go语言中的双向链表

简介 双向链表是链表家族中的一种高级结构&#xff0c;每个节点不仅指向下一个节点&#xff0c;还指向上一个节点。今天&#xff0c;我们将学习如何在Go语言中实现和操作这种灵活的数据结构。 双向链表的优缺点 优点&#xff1a; 可以从任一方向遍历链表&#xff0c;灵活性高…...

Fastapi + vue3 自动化测试平台---移动端App自动化篇

概述 好久写文章了&#xff0c;专注于新框架&#xff0c;新UI界面的实践&#xff0c;废话不多说&#xff0c;开搞 技术架构 后端&#xff1a; Fastapi Airtest multiprocessing 前端&#xff1a; 基于 Vue3、Vite、TypeScript、Pinia、Pinia持久化插件、Unocss 和 Elemen…...

ElasticSearch easy-es 聚合函数 group by 混合写法求Top N 词云 分词

1.将用户访问记录表数据同步到ES&#xff0c;并且分词&#xff0c;获取用户访问最多前十条词语。 Elasticsearch、Easy-es 快速入门 SearchAfterPage分页 若依前后端分离 Ruoyi-Vue SpringBoot 使用结巴分词器 <!-- 分词器--><dependency><groupId>com.hua…...

在 ASP.NET C# Web API 中实现 Serilog 以增强请求和响应的日志记录

介绍 日志记录是任何 Web 应用程序的关键方面。它有助于调试、性能监控和了解用户交互。在 ASP.NET C# 中&#xff0c;集成 Serilog 作为记录请求和响应&#xff08;包括传入和传出的数据&#xff09;的中间件可以显著提高 Web API 的可观察性和故障排除能力。 在过去的几周里&…...

2024年顶级小型语言模型前15名

本文&#xff0c;我们将深入了解2024年备受瞩目的十五款小型语言模型&#xff08;SLMs&#xff09;&#xff0c;它们分别是Llama 3.1 8B、Gemma2、Qwen 2、Mistral Nemo、Phi-3.5等。这些SLMs以其精巧的体积和高效率著称&#xff0c;它们不需要依赖庞大的服务器资源&#xff0c…...

精通 Python 网络安全(一)

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

【python自动化二】pytest集成allure生成测试报告

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

网络版本的通讯录青春版(protobuf)

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

开源模型应用落地-安全合规篇-用户输入价值观判断(三)

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

神经网络入门实战:(十四)pytorch 官网内置的 CIFAR10 数据集,及其网络模型

(一) pytorch 官网内置的网络模型 图像处理&#xff1a; Models and pre-trained weights — Torchvision 0.20 documentation (二) CIFAR10数据集的分类网络模型&#xff08;仅前向传播&#xff09;&#xff1a; 下方的网络模型图片有误&#xff0c;已做修改&#xff0c;具…...

【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中运行的时候报错了&#xff1a; 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&#xff1a;证书标准pem和der&#xff1a;两种&#xff08;包括公私钥、证书签名请求、证书等内容的&#xff09;的格式&#xff0c;前者是文本形式&#xff0c;linux常用&#xff0c;后者是二进制形式&#xff0c;windows常用&#xff0c;仅仅是格式&…...

实例分割详解

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

D87【python 接口自动化学习】- pytest基础用法

day87 pytest运行参数 -m -k 学习日期&#xff1a;20241203 学习目标&#xff1a;pytest基础用法 -- pytest运行参数-m -k 学习笔记&#xff1a; 常用运行参数 pytest运行参数-m -k pytest -m 执行特定的测试用例&#xff0c;markers最好使用英文 [pytest] testpaths./te…...