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

C#中序列化的选择:JSON、XML、二进制与Protobuf详解

C#中序列化的选择:JSON、XML、二进制与Protobuf详解

在C#开发中,序列化是将对象转换为可存储或传输的格式的过程,而反序列化则是将存储或传输的数据重新转换为对象的过程。选择合适的序列化方式对应用程序的性能、可维护性和兼容性至关重要。本文将详细介绍C#中常见的序列化方式:JSONXML二进制Protobuf,并帮助你根据需求选择最合适的方案。


1. JSON 序列化

1.1 概述

  • JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写。
  • 它广泛用于Web API、配置文件和数据存储。

1.2 使用场景

  • Web API 数据传输。
  • 配置文件存储。
  • 需要人类可读格式的场景。

1.3 实现方式

C#中可以使用 System.Text.JsonNewtonsoft.Json 库来实现 JSON 序列化。

使用 System.Text.Json(.NET Core 3.0+)
using System;
using System.Text.Json;public class Person
{public string Name { get; set; }public int Age { get; set; }
}class Program
{static void Main(){var person = new Person { Name = "Alice", Age = 30 };// 序列化string json = JsonSerializer.Serialize(person);Console.WriteLine("Serialized JSON: " + json);// 反序列化var deserializedPerson = JsonSerializer.Deserialize<Person>(json);Console.WriteLine($"Deserialized Person: {deserializedPerson.Name}, {deserializedPerson.Age}");}
}
使用 Newtonsoft.Json
using System;
using Newtonsoft.Json;public class Person
{public string Name { get; set; }public int Age { get; set; }
}class Program
{static void Main(){var person = new Person { Name = "Alice", Age = 30 };// 序列化string json = JsonConvert.SerializeObject(person);Console.WriteLine("Serialized JSON: " + json);// 反序列化var deserializedPerson = JsonConvert.DeserializeObject<Person>(json);Console.WriteLine($"Deserialized Person: {deserializedPerson.Name}, {deserializedPerson.Age}");}
}

优点

  • 轻量级,易于阅读和编写。
  • 广泛支持,跨平台兼容性好。

缺点

  • 数据冗余较多,文件体积较大。
  • 不支持复杂数据类型(如循环引用)。

2. XML 序列化

2.1 概述

  • XML(eXtensible Markup Language)是一种标记语言,具有严格的格式和结构。
  • 它广泛用于配置文件、数据存储和 Web 服务。

2.2 使用场景

  • 需要严格结构化的数据存储。
  • 配置文件存储。
  • 与旧系统兼容的场景。

2.3 实现方式

C#中可以使用 System.Xml.Serialization 来实现 XML 序列化。

using System;
using System.IO;
using System.Xml.Serialization;public class Person
{public string Name { get; set; }public int Age { get; set; }
}class Program
{static void Main(){var person = new Person { Name = "Alice", Age = 30 };// 序列化var serializer = new XmlSerializer(typeof(Person));using (var writer = new StringWriter()){serializer.Serialize(writer, person);string xml = writer.ToString();Console.WriteLine("Serialized XML: " + xml);}// 反序列化string xmlData = @"<Person><Name>Alice</Name><Age>30</Age></Person>";using (var reader = new StringReader(xmlData)){var deserializedPerson = (Person)serializer.Deserialize(reader);Console.WriteLine($"Deserialized Person: {deserializedPerson.Name}, {deserializedPerson.Age}");}}
}

优点

  • 结构化数据,易于验证和解析。
  • 支持复杂数据类型。

缺点

  • 数据冗余较多,文件体积较大。
  • 可读性较差,解析速度较慢。

3. 二进制序列化

3.1 概述

  • 二进制序列化将对象转换为二进制格式,适合高效存储和传输。
  • 它通常用于高性能场景或需要紧凑数据格式的场景。

3.2 使用场景

  • 高性能数据传输。
  • 紧凑数据存储。
  • 需要加密或压缩的场景。

3.3 实现方式

C#中可以使用 System.Runtime.Serialization.Formatters.Binary 来实现二进制序列化。

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;[Serializable]
public class Person
{public string Name { get; set; }public int Age { get; set; }
}class Program
{static void Main(){var person = new Person { Name = "Alice", Age = 30 };// 序列化var formatter = new BinaryFormatter();using (var stream = new MemoryStream()){formatter.Serialize(stream, person);byte[] binaryData = stream.ToArray();Console.WriteLine("Serialized Binary Data: " + BitConverter.ToString(binaryData));}// 反序列化byte[] data = /* 从文件或网络获取二进制数据 */;using (var stream = new MemoryStream(data)){var deserializedPerson = (Person)formatter.Deserialize(stream);Console.WriteLine($"Deserialized Person: {deserializedPerson.Name}, {deserializedPerson.Age}");}}
}

优点

  • 数据紧凑,文件体积小。
  • 序列化和反序列化速度快。

缺点

  • 不可读,调试困难。
  • 跨平台兼容性差。

4. Protobuf 序列化

4.1 概述

  • Protobuf(Protocol Buffers)是 Google 开发的一种高效的数据交换格式。
  • 它比 JSON 和 XML 更紧凑,序列化和反序列化速度更快。

4.2 使用场景

  • 高性能数据传输(如微服务通信)。
  • 需要紧凑数据格式的场景。
  • 跨语言兼容的场景。

4.3 实现方式

C#中可以使用 Google.Protobuf 库来实现 Protobuf 序列化。

安装 NuGet 包
Install-Package Google.Protobuf
Install-Package Google.Protobuf.Tools
定义 Protobuf 消息格式
syntax = "proto3";
message Person {string name = 1;int32 age = 2;
}
使用 Protobuf 序列化
using System;
using Google.Protobuf;public class Person
{public string Name { get; set; }public int Age { get; set; }
}class Program
{static void Main(){var person = new Person { Name = "Alice", Age = 30 };// 序列化var message = new PersonMessage { Name = person.Name, Age = person.Age };byte[] data = message.ToByteArray();Console.WriteLine("Serialized Protobuf Data: " + BitConverter.ToString(data));// 反序列化var deserializedMessage = PersonMessage.Parser.ParseFrom(data);Console.WriteLine($"Deserialized Person: {deserializedMessage.Name}, {deserializedMessage.Age}");}
}

优点

  • 数据紧凑,文件体积小。
  • 序列化和反序列化速度快。
  • 跨语言兼容性好。

缺点

  • 需要定义消息格式,开发成本较高。
  • 不可读,调试困难。

5. 总结

特性JSONXML二进制Protobuf
可读性
文件体积较大较大最小
性能最高
跨平台兼容性
适用场景Web API、配置文件配置文件、旧系统兼容高性能存储、传输高性能传输、跨语言通信
  • 如果需要人类可读的格式,选择 JSONXML
  • 如果需要高性能和紧凑的数据格式,选择 二进制Protobuf
  • 如果需要跨语言兼容性,选择 JSONProtobuf

根据你的具体需求选择合适的序列化方式,可以显著提升应用程序的性能和可维护性。如果你有更多问题或想法,欢迎在评论区留言!

相关文章:

C#中序列化的选择:JSON、XML、二进制与Protobuf详解

C#中序列化的选择&#xff1a;JSON、XML、二进制与Protobuf详解 在C#开发中&#xff0c;序列化是将对象转换为可存储或传输的格式的过程&#xff0c;而反序列化则是将存储或传输的数据重新转换为对象的过程。选择合适的序列化方式对应用程序的性能、可维护性和兼容性至关重要。…...

深入理解 Java 设计模式之策略模式

一、引言 在 Java 编程的世界里&#xff0c;设计模式就如同建筑师手中的蓝图&#xff0c;能够帮助我们构建出更加健壮、灵活且易于维护的代码结构。而策略模式作为一种经典的行为型设计模式&#xff0c;在诸多实际开发场景中都发挥着至关重要的作用。它能够让算法的定义与使用…...

如何快速导出Python包和安装?

pip freeze > requirements.txt导出&#xff1a; 安转 &#xff1a; ​ pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple...

记录一个在增量更新工具类

1. 应用场景 比方说我现在有一个商品&#xff0c;这个商品可以上传图片用来展示&#xff0c;之前已经上传过5张图片 ABCDE&#xff0c;现在其中BC这两张图片不想要了要换成FG&#xff0c;这个时候就可以使用这个工具类进行更新。 在最后一步&#xff0c;可以不管ADE直接只管新增…...

VUE3 常用的组件介绍

Vue 组件简介 Vue 组件是构建 Vue 应用程序的核心部分&#xff0c;组件帮助我们将 UI 分解为独立的、可复用的块&#xff0c;每个组件都有自己的状态和行为。Vue 组件通常由模板、脚本和样式组成。组件的脚本部分包含了各种配置选项&#xff0c;用于定义组件的逻辑和功能。 组…...

UML系列之Rational Rose笔记二:包图

rose绘制包图&#xff0c;有简单的有复杂的&#xff1b; 正常图简单的话&#xff0c;直接新建package使用就行&#xff0c;改变package的大小&#xff0c;改变名称当作不同的包就行&#xff1b;基本没有什么学习难度&#xff1b;在此&#xff0c;笔者直接介绍一下回执标准一点…...

第34天:安全开发-JavaEE应用反射机制攻击链类对象成员变量方法构造方法

时间轴&#xff1a; Java反射相关类图解&#xff1a; 反射&#xff1a; 1、什么是 Java 反射 参考&#xff1a; https://xz.aliyun.com/t/9117 Java 提供了一套反射 API &#xff0c;该 API 由 Class 类与 java.lang.reflect 类库组成。 该类库包含了 Field 、 Me…...

cuda实现flash_attn_mma_share_kv源码分析

一 源码分析 1.1 函数入口 void flash_attn_mma_stages_split_q_shared_kv(torch::Tensor Q, torch::Tensor K, torch::Tensor V, torch::Tensor O, int stages) {CHECK_TORCH_TENSOR_DTYPE(Q, torch::kHalf) // Q [B,H,N,D]CHECK_TORCH_TENSOR_DTYPE(K, torch::kHalf) // K …...

Python操作Excel的库openpyxl使用入门

openpyxl 是一个用于读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 库。以下是一些 openpyxl 的基本使用方法&#xff1a; 安装 openpyxl 首先&#xff0c;确保已经安装了 openpyxl。如果没有安装&#xff0c;可以使用以下命令进行安装&#xff1a; pip install openp…...

《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(二)

《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(二) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《…...

信息网络安全考试gjdw

序号 一级纲要 二级纲要 题目分类 题型 题干 选项 答案 题目依据 试题分数 试题编码 备注 说明 1 信息安规 \ 专业题库 单选题 根据信息安规规定&#xff0c;试验和推广信息新技术&#xff0c;应制定相应的&#xff08; &#xff09;&#xff0c;经本单位…...

S变换matlab实现

S变换函数 function [st,t,f] st(timeseries,minfreq,maxfreq,samplingrate,freqsamplingrate) % S变换 % Code by huasir Beijing 2025.1.10 % Reference is "Localization of the Complex Spectrum: The S Transform" % from IEEE Transactions on Signal Proc…...

【OLAP和PLTP】—— 浅谈两者的应用场景和区别

大家好&#xff0c;我是摇光~ OLAP&#xff08;Online Analytical Processing&#xff09;和OLTP&#xff08;Online Transaction Processing&#xff09;是两种不同的数据处理技术&#xff0c;分别用于不同的业务场景。以下是关于OLAP和OLTP的详细介绍&#xff1a; 一、OLAP&…...

计算机组成原理(1)王道学习笔记

一、 引言 计算机硬件唯一能识别的数据是二进制-----0/1。 用低/高电平表示0/1。 通过很多条电路&#xff0c;可以传递多个二进制数位。 每个二进制数位称为1bit&#xff08;比特&#xff09;。 计算机硬件的基本组成 早期的ENIAC计算机是通过手动接线来控制计算。冯诺依曼首次…...

LLaMA模型:自然语言处理的革新者

引言 在人工智能的领域中&#xff0c;自然语言处理&#xff08;NLP&#xff09;是一个充满挑战的分支&#xff0c;它的目标是让计算机能够理解和生成人类语言。Transformer模型&#xff0c;作为NLP的基石&#xff0c;已经极大地推动了这一领域的发展。然而&#xff0c;为了进一…...

各种特种无人机快速发展,无人机反制技术面临挑战

随着科技的飞速发展&#xff0c;各种特种无人机在军事、民用等领域得到了广泛应用&#xff0c;其性能不断提升&#xff0c;应用场景也日益丰富。然而&#xff0c;无人机反制技术的发展确实面临一定的挑战&#xff0c;难以完全跟上无人机技术的快速发展步伐。以下是对这一问题的…...

1555银行账户概要_pandas解答

目录 题目链接(无_力扣VIP_略过)一.读题(建议使用这种表结构_数据对比看)题目SQL Schema & Pandas Schema 建表语句_数据 二.答案_MySQL一图解MySQL一图解__可只需看此!!!!!!!!!!!!!!!!答案-----------------------------------------------------------------------------…...

【C++补充】第一弹---位图技术揭秘:内存优化与快速访问

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1 位图 1.1 位图相关面试题 1.2 位图的设计及实现 1.3 C库中的位图 bitset 1.4 位图的模拟实现 1.5 位图的优缺点 1.6 位图相关考察题目 1 …...

node.js中实现token的生成与验证

Token&#xff08;令牌&#xff09;是一种用于在客户端和服务器之间安全传输信息的加密字符串。在Web开发中&#xff0c;Token常用于身份验证和授权&#xff0c;确保用户能够安全地访问受保护的资源。 作用与意义 身份验证&#xff1a;Token可以用来验证用户的身份&#xff0…...

服务器登陆后有java变量

需求&#xff1a;在ssh服务器后&#xff0c;用户root 使用java会报错&#xff0c;没有这个变量&#xff0c;其实环境变量中已经有配置了&#xff0c;在/etc/profile 中有写变量及地址&#xff0c;通过source /etc/profile 命令也可以使环境变量加载上&#xff0c;但是ssh后不会…...

层次模型式的工作流

层次模型式的工作流是一种适合分布式版本控制系统&#xff08;如 Git、Mercurial&#xff09;的开发协作方式&#xff0c;它将开发团队分成多个层次&#xff0c;每个层次有明确的角色和职责&#xff0c;代码从底层逐步向上层汇总和集成&#xff0c;最终形成一个完整、稳定的产品…...

Linux 发行版介绍与对比:Red Hat、Ubuntu、Kylin、Debian

Linux 操作系统有众多发行版&#xff08;Distros&#xff09;&#xff0c;每个发行版的设计目标、目标用户、应用场景和使用方式有所不同。常见的 Linux 发行版包括 Red Hat、Ubuntu、Kylin 和 Debian。以下是这些发行版的详细介绍与对比&#xff0c;以及它们的应用场景和使用方…...

G1原理—3.G1是如何提升垃圾回收效率

大纲 1.G1为了提升GC的效率设计了哪些核心机制 2.G1中的记忆集是什么 3.G1中的位图和卡表 4.记忆集和卡表有什么关系 5.RSet记忆集是怎么更新的 6.DCQ机制的底层原理是怎样的 7.DCQS机制及GC线程对DCQ的处理 提升G1垃圾回收器GC效率的黑科技 G1设计了一套TLAB机制 快速…...

IOS界面传值-OC

1、页面跳转 由 ViewController 页面跳转至 NextViewController 页面 &#xff08;1&#xff09;ViewController ViewController.h #import <UIKit/UIKit.h>interface ViewController : UIViewControllerend ViewController.m #import "ViewController.h" …...

C# SQL ASP.NET Web

留学生的课程答疑 按照要求完成程序设计、数据库设计、用户手册等相关技术文档&#xff1b; 要求 1. 计算机相关专业&#xff0c;本科以上学历&#xff0c;至少有1年以上工作经验或实习经历。 2. 熟练掌握WinForm程序开发&#xff0c;或ASP.NET Web编程。 3. 熟悉C#中网络…...

asp.net core webapi 并发请求时 怎么保证实时获取的用户信息是此次请求的?

对于并发请求&#xff0c;每个请求会被分配到一个独立的线程或线程池工作线程上。通过 HttpContext 或 AsyncLocal&#xff0c;每个线程都能独立地获取到它自己的上下文数据。由于这些数据是与当前请求相关的&#xff0c;因此在并发请求时不会互相干扰。 在并发请求时&#xf…...

软件23种设计模式完整版[附Java版示例代码]

一、什么是设计模式 设计模式是在软件设计中反复出现的问题的通用解决方案。它们是经过多次验证和应用的指导原则,旨在帮助软件开发人员解决特定类型的问题,提高代码的可维护性、可扩展性和重用性。 设计模式是一种抽象化的思维方式,可以帮助开发人员更好地组织和设计他们…...

FPGA 20 ,FPGA按键消抖功能解析与实现

目录 前言 一. 具体场景 二. 消抖方法...

基于单片机的无线气象仪系统设计(论文+源码)

1系统方案设计 如图2.1所示为无线气象仪系统设计框架。系统设计采用STM32单片机作为主控制器&#xff0c;结合DHT11温湿度传感器、光敏传感器、BMP180气压传感器、PR-3000-FS-N01风速传感器实现气象环境的温度、湿度、光照、气压、风速等环境数据的检测&#xff0c;并通过OLED1…...

OA系统如何做好DDOS防护

OA系统如何做好DDOS防护&#xff1f;在数字化办公蔚然成风的当下&#xff0c;OA&#xff08;办公自动化&#xff09;系统作为企业内部管理与协作的神经中枢&#xff0c;其安全性和稳定性直接关系到企业的日常运营效率、信息流通效率以及长远发展。OA系统不仅承载着企业内部的日…...

java_单例设计模式

什么是设计模式 什么是单例设计模式 单例设计模式——饿汉式 虽然你没有使用这个对象实例&#xff0c;但是它也帮你创建了&#xff01;容易造成对象的浪费 對象&#xff0c;通常是重量級的對象, 餓漢式可能造成創建了對象&#xff0c;但是沒有使用. package com.hspedu.singl…...

比较分析:Windsurf、Cody、Cline、Roo Cline、Copilot 和 通义灵码

随着人工智能技术的快速发展&#xff0c;开发者工具变得越来越智能化&#xff0c;特别是在代码生成、辅助编程等领域&#xff0c;市面上涌现了多种 AI 驱动的工具。本文将从开源性、集成能力、功能覆盖范围、支持的编程语言、生态兼容性、成本、学习曲线、响应速度、离线支持以…...

vue3后台系统动态路由实现

动态路由的流程&#xff1a;用户登录之后拿到用户信息和token&#xff0c;再去请求后端给的动态路由表&#xff0c;前端处理路由格式为vue路由格式。 1&#xff09;拿到用户信息里面的角色之后再去请求路由表&#xff0c;返回的路由为tree格式 后端返回路由如下&#xff1a; …...

C#版 软件开发6大原则与23种设计模式

开发原则和设计模式一直是软件开发中的圣经, 但是这仅仅适用于中大型的项目开发, 在小型项目的开发中, 这些规则会降低你的开发效率, 使你的工程变得繁杂. 所以只有适合你的才是最好的. 设计模式六大原则1. 单一职责原则&#xff08;Single Responsibility Principle&#xff0…...

后端Java开发:第十三天

第十三天&#xff1a;继承 - 面向对象的核心概念 欢迎来到第十三天的学习&#xff01;今天&#xff0c;我们将深入探讨 Java 中的 继承&#xff08;Inheritance&#xff09;&#xff0c;这是面向对象编程的四大基本特性之一。继承是指一个类&#xff08;子类&#xff09;通过继…...

awr报告无法生成:常见分析手段

awr报告无法生成:常见分析手段 STATISTICS_LEVEL和OPEN_MODEAWR快照是否能自动生成?AWR快照能否手动生成?日志有无ORA-12751或ORA-32701报错?MMON进程是否被挂起?排查数据库隐藏参数分析快照生成错误信息分析AWR Snapshot Tracing分析AWR Table Flush是否超时STATISTICS_L…...

基础算法——差分

原理与特点 先回顾一下前缀和算法。 | arr | 1 | 3 | 7 | 5 | 6 | | ---------- | ------ | ------ | ------ | ------ | ------ | | prefix 值 | 101 | 134 | 13711 | 137516 | 1375622 |前缀和的特点是前面的相加prefix(i)sum(i-1)arr(i)。那么差分数组diff就如下面的形式 |…...

[ LeetCode 75 ] 283 移动零(JavaScript)

283 移动零 题目描述解题思路步骤解析时间和空间复杂度代码实现 题目描述 LeetCode 283 移动零 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操…...

YOLOv10改进,YOLOv10添加HAttention注意机制用于图像修复的混合注意力转换器,CVPR2023,超分辨率重建

摘要 基于Transformer的方法在低层视觉任务中表现出色,例如图像超分辨率。然而,作者通过归因分析发现,这些网络只能利用有限的空间范围的输入信息。这意味着现有网络尚未充分发挥Transformer的潜力。为了激活更多的输入像素以获得更好的重建效果,作者提出了一种新型的混合…...

VS调试MFC进入系统源代码配置

调试MFC代码有时候能进入MFC的源代码,有时候不能.之前一直没有深入研究.后面经过查资料发现每次调试必能进入源代码的配置.很简单,只需要3步. 1.打开工具->选项->调试->符号,勾选Microsoft符号服务器. 2.打开项目->属性->配置属性->常规,MFC的使用修改成&qu…...

C# 告别FirstOrDefault

一、开篇&#xff1a;FirstOrDefault 的 “江湖地位” 在 C# 编程的世界里&#xff0c;FirstOrDefault 可谓是一位 “常客”&#xff0c;被广大开发者频繁地运用在各种项目场景之中。无论是 Windows 窗体应用程序&#xff0c;需要从数据集中检索第一条记录&#xff0c;或是满足…...

图像处理|腐蚀操作

在计算机视觉与图像处理中&#xff0c;腐蚀操作&#xff08;Erosion&#xff09;是形态学操作的一种。形态学操作广泛应用于二值图像中&#xff0c;主要用于分析和提取图像中的结构信息。腐蚀操作是这类操作中最常见的一种&#xff0c;用来对图像进行“收缩”处理&#xff0c;消…...

全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之循环结构(应用)

实战训练1—报数游戏 问题描述&#xff1a; 小明和小鹏玩报数游戏&#xff0c;小明按1∼20 报数&#xff0c;小鹏按1∼30报数。若两人同时开始&#xff0c;并以同样的速度报数&#xff0c;当两人都报了1000个数时&#xff0c;同时报相同数的次数是多少呢&#xff1f; 输入格…...

140.WEB渗透测试-信息收集-小程序、app(11)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;139.WEB渗透测试-信息收集-小程序、app&#xff08;10&#xff09; 3.直接有app 直接拿…...

《新闻大厦抢先版》V0.18.105+Dlcs官方学习版

《新闻大厦抢先版》官方版https://pan.xunlei.com/s/VODaeUn3v-ZWVvvmUMfo5AqWA1?pwdnhpz# 建造并不断优化新闻大楼&#xff0c;保障员工权益并及时赶上周日的印刷交期&#xff01; 招募并管理不同职业以登上成功的阶梯&#xff1a;记者、摄像师、勤杂工&#xff0c;除此以外…...

【Uniapp-Vue3】Prop校验与prop默认值用法及循环遍历数组对象

一、prop校验 如果我们在想要限制prop的类型&#xff0c;就可以在接收prop的时候对接收类型进行限制&#xff1a; defineProps({ 属性名:{ type:类型 } }) 需要注意类型的首字母大写 但是设置了传入参数类型限制并不能严格限制&#xff0c;只会在后台进行提示&#xff1a; 二、…...

Android Studio创建新项目并引入第三方jar、aar库驱动NFC读写器读写IC卡

本示例使用设备&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1bbW3AUC&ftt&id615391857885 一、打开Android Studio,点击 File> New>New project 菜单&#xff0c;选择 要创建的项目模版&#xff0c;点击 Next 二、输入项目名称…...

Spring Boot | 基于MinIO实现文件上传和下载

关注&#xff1a;CodingTechWork 介绍 在现代的 web 应用中&#xff0c;文件上传和下载是常见的需求。MinIO 是一个开源的高性能分布式对象存储服务&#xff0c;可以用来存储和管理大量的非结构化数据&#xff0c;如图片、视频、日志文件等。本文将介绍如何在 Spring Boot 应用…...

【DNS 阿里云,域名解析,解析到IP的指定端口】

- 进入 阿里云域名解析界面 - 点击 解析设置 - 添加记录 1.添加一条 A/AAAA 类型解析你的服务器的IP地址&#xff08;不需要带端口号&#xff0c;这条解析只是起到中转作用&#xff09; 示例&#xff1a;主机记录&#xff1a;aa.bb.com 记录值&#xff1a;xxx.xxx.xxx.xxx (…...

力扣经典二分题:4. 寻找两个正序数组的中位数

题目链接&#xff1a;4. 寻找两个正序数组的中位数 - 力扣&#xff08;LeetCode&#xff09; 一、题目分析 这道题目是让我们在 两个正序的数组中寻找中位数已知两个数组的大小分别是&#xff1a;int m nums1.size(),n nums2.size();中位数性质1&#xff1a;中位数左侧元素 …...