Jackson详解
文章目录
- 一、Jackson介绍
- 二、基础序列化和反序列化
- 1、快速入门
- 2、序列化API
- 3、反序列化API
- 4、常用配置
- 三、常用注解
- 1、@JsonProperty
- 2、@JsonAlias
- 3、@JsonIgnore
- 4、@JsonIgnoreProperties
- 5、@JsonFormat
- 6、@JsonPropertyOrder
- 四、高级特性
- 1、处理泛型
- 1.1、反序列化List泛型
- 1.2、反序列化Map泛型
- 2、自定义序列化和反序列化
一、Jackson介绍
- Jackson库的核心功能是将
Java对象转换为json字符串(序列化)
以及将json字符串转换为Java对象(反序列化)
- SpringMVC默认json解析器便是Jackson
与其他Java的json的框架相比
- Jackson 解析
大
的json文件速度比较快 - Jackson 运行时占用内存比较
低
,性能比较好 - Jackson 有
灵活
的API,可以很容易进行扩展和定制
核心模块由三部分组成
jackson-core,核心包
,提供基于"流模式"解析的相关API(JsonPaser和JsonGenerator),生成和解析jsonjackson-annotations,注解包
,提供标准注解功能jackson-databind ,数据绑定包
,提供基于"对象绑定"解析的相关API(ObjectMapper)和"树模型"解析的相关API(JsonNode)
其中 jackson-databind内部依赖了jackson-annotations与ackson-core,故只导入jackson-databind即可
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.11.0</version>
</dependency>
二、基础序列化和反序列化
ObjectMapper
是Jackson序列化和反序列化的核心类,提供了许多用于定制序列化和反序列化的方法和配置选项- 默认情况下,ObjectMapper在序列化对象时,将实体所有的字段一一序列化,无论这些字段是否有值,是否为
null
- 注意:如果实体的某个字段没有提供
getter
方法,则该字段不会被序列化 - ObjectMapper主要用于对Java对象(比如 POJO、List、Set、Map等等)进行序列化与反序列化
1、快速入门
@Testpublic void test1() throws JsonProcessingException {ObjectMapper objectMapper = new ObjectMapper();User user = new User();user.setAge(20);user.setBirthday(new Date());user.setName("张三");user.setAddress(null);// 序列化String jsonString = objectMapper.writeValueAsString(user);System.out.println("序列化字符串:" + jsonString);// 反序列化User userFromJson = objectMapper.readValue(jsonString, User.class);System.out.println("反序列化结果:" + userFromJson);}
输出结果:
序列化字符串:{"age":20,"name":"张三","birthday":1721266913536,"address":null}
反序列化结果:User(age=20, name=张三, birthday=Thu Jul 18 09:41:53 CST 2024, address=null)
2、序列化API
- String writeValueAsString(Object value)
(最常用)
- 将任何Java对象()如 POJO、List、Set、Map等)序列化为
json字符串
- 如果对象中某个属性的值为null,则默认也会序列化为null
- 如果value为null,返回序列化的结果也返回null
- 将任何Java对象()如 POJO、List、Set、Map等)序列化为
- byte[] writeValueAsBytes(Object value)
- 将Java对象序列化为
字节数组
- 将Java对象序列化为
- writeValue(File resultFile, Object value)
- 将Java对象序列化并输出指定
文件
中
- 将Java对象序列化并输出指定
- writeValue(OutputStream out, Object value)
- 将Java对象序列化并输出到指定字节
输出流
中
- 将Java对象序列化并输出到指定字节
@Test
public void test2() throws IOException {ObjectMapper objectMapper = new ObjectMapper();User user = new User();user.setAge(20);user.setBirthday(new Date());user.setName("张三");user.setAddress(null);// 序列化bytbyte[] bytes = objectMapper.writeValueAsBytes(user);System.out.println("序列化字节数组:" + new String(bytes));// 序列化到文件objectMapper.writeValue(new File("/Users/xuchang/Documents/json.txt"), user);
}
输出结果:
3、反序列化API
- T readValue(String content, Class valueType)
(最常用)
- 从给定的
json字符串
反序列化为Java对象 - valueType表示反序列化的任何
Class对象
(如 POJO、List、Set、Map等) - content为空或者为null,都会报错
- 从给定的
- T readValue(byte[] src, Class valueType)
- 将json内容的
字节数组
反序列化为Java对象
- 将json内容的
- T readValue(File src, Class valueType)
- 将本地json内容的
文件
反序列化为Java对象
- 将本地json内容的
- T readValue(InputStream src, Class valueType)
- 将json内容的
字节输入流
反序列化为Java对象
- 将json内容的
- T readValue(Reader src, Class valueType)
- 将json内容的
字符输入流
反序列化为Java对象
- 将json内容的
- T readValue(URL src, Class valueType)
- 通过
网络url
地址将json内容反序列化为Java对象
- 通过
4、常用配置
private static final ObjectMapper objectMapper;static {// 创建ObjectMapper对象objectMapper = new ObjectMapper();// configure方法 配置一些需要的参数// 转换为格式化的json 显示出来的格式美化objectMapper.enable(SerializationFeature.INDENT_OUTPUT);// 序列化的时候序列对象的那些属性// JsonInclude.Include.NON_DEFAULT 属性为默认值不序列化// JsonInclude.Include.ALWAYS 所有属性// JsonInclude.Include.NON_EMPTY 属性为 空(“”) 或者为 NULL 都不序列化// JsonInclude.Include.NON_NULL 属性为NULL 不序列化objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);// 反序列化时,遇到未知属性会不会报错// true - 遇到没有的属性就报错// false - 没有的属性不会管,不会报错objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);// 如果是空对象的时候,不抛异常objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);// 忽略 transient 修饰的属性objectMapper.configure(MapperFeature.PROPAGATE_TRANSIENT_MARKER, true);// 去除默认时间戳格式objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);// 设置为中国北京时区objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));// 序列化日期格式 Date类型格式化objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));// 处理java8不同时间类型JavaTimeModule module = new JavaTimeModule();module.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));module.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));module.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(("HH:mm:ss"))));module.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));module.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));module.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss")));// 序列换成json时,将所有的long变成string(因为js中得数字类型不能包含所有的java long值)module.addSerializer(Long.TYPE, ToStringSerializer.instance);module.addSerializer(Long.class, ToStringSerializer.instance);objectMapper.registerModule(module);
}@Test
public void testObjectMapper() throws JsonProcessingException {User user = new User();user.setId(1770376103094779915L);user.setAge(20);user.setBirthday(new Date());user.setName("张三");user.setAddress(null);user.setLocalDateTime(LocalDateTime.now());// 序列化String jsonString = objectMapper.writeValueAsString(user);System.out.println("序列化字符串:" + jsonString);// 注意这里添加不存在的属性hobby,反序列化不会报错jsonString = "{\"id\":1770376103094779915,\"age\":20,\"name\":\"张三\",\"birthday\":\"2024-07-19 11:02:19\",\"hobby\":\"打篮球\"}";// 反序列化User userFromJson = objectMapper.readValue(jsonString, User.class);System.out.println("反序列化结果:" + userFromJson);
}
@Data
public class User {private Long id;private Integer age;private String name;private Date birthday;private String address;private LocalDateTime localDateTime;
}
输出结果:
序列化字符串:{"id" : "1770376103094779915","age" : 20,"name" : "张三","birthday" : "2024-07-19 14:27:48","localDateTime" : "2024-07-19 14:27:48"
}
反序列化结果:User(id=1770376103094779915, age=20, name=张三, birthday=Fri Jul 19 11:02:19 CST 2024, address=null, localDateTime=null)
三、常用注解
1、@JsonProperty
- 用于在Java对象的属性和json字段之间建立映射关系
value
:用于指定json属性的名称,当Java属性和json属性名称不一致时使用index
:指示此属性的数字索引的属性access
:用于指定该属性的访问方式- JsonAccess.READ_ONLY(只读-序列化可见)
- JsonAccess.WRITE_ONLY(只写-反序列化可见)
- JsonAccess.READ_WRITE(可读可写)
@Test
public void test3() throws JsonProcessingException {ObjectMapper objectMapper = new ObjectMapper();User user = new User();user.setAge(18);user.setName("张三");user.setAddress("北京");user.setBirthday(new Date());// 序列化为json字符串String jsonString = objectMapper.writeValueAsString(user);System.out.println(jsonString);// 反序列化为对象String userJson = "{\"age\":18,\"user_address\":\"北京\",\"user_birthday\":1721309276459,\"user_name\":\"张三\"}";User userValue = objectMapper.readValue(userJson, User.class);System.out.println(userValue);
}@Data
public class User {@JsonProperty(index = 0)private Integer age;@JsonProperty(value = "user_name", access = JsonProperty.Access.READ_ONLY, index = 3)private String name;@JsonProperty(value = "user_birthday", access = JsonProperty.Access.WRITE_ONLY, index = 2)private Date birthday;@JsonProperty(value = "user_address", access = JsonProperty.Access.READ_WRITE, index = 1)private String address;
}
输出结果:
{"age":18,"user_address":"北京","user_name":"张三"}
User(age=18, name=null, birthday=Thu Jul 18 21:27:56 CST 2024, address=北京)
- 序列化属性名称及value设置的名称
- 序列化根据index属性排序,反序列化还是类自上而下的顺序
- 只读属性可以序列化,只写属性可以反序列化(读和写是相对内存中对象来理解的)
2、@JsonAlias
- 在反序列化的时候可以让Bean的属性
接收多个
json字段的名称
@Test
public void test4() throws JsonProcessingException {ObjectMapper objectMapper = new ObjectMapper();// 反序列化为对象String userJson = "{\"age\":18,\"address\":\"北京\",\"birthday\":1721309276459,\"nick_name\":\"张三\"}";User userValue = objectMapper.readValue(userJson, User.class);System.out.println(userValue);
}@Data
public class User {private Integer age;@JsonAlias(value = {"nick_name","vip_name"})private String name;private Date birthday;private String address;
}
输出结果:
User(age=18, name=张三, birthday=Thu Jul 18 21:27:56 CST 2024, address=北京)
3、@JsonIgnore
- 序列化时将java bean中的一些属性
忽略掉
,序列化和反序列化都受影响 - 一般标记在属性或者方法上,返回的json数据即不包含该属性
@Test
public void test5() throws JsonProcessingException {ObjectMapper objectMapper = new ObjectMapper();User user = new User();user.setAge(18);user.setName("张三");user.setAddress("北京");user.setBirthday(new Date());// 序列化为json字符串String jsonString = objectMapper.writeValueAsString(user);System.out.println(jsonString);// 反序列化为对象String userJson = "{\"age\":18,\"address\":\"北京\",\"birthday\":1721309276459,\"name\":\"张三\"}";User userValue = objectMapper.readValue(userJson, User.class);System.out.println(userValue);
}
@Data
public class User {@JsonIgnoreprivate Integer age;@JsonIgnoreprivate String name;private Date birthday;private String address;
}
输出结果:
{"birthday":1721310730459,"address":"北京"}
User(age=null, name=null, birthday=Thu Jul 18 21:27:56 CST 2024, address=北京)
4、@JsonIgnoreProperties
- 序列化时将java bean中的
一些属性忽略掉
,序列化和反序列化都受影响
@Data
@JsonIgnoreProperties({"age", "name"})
public class User {private Integer age;private String name;private Date birthday;private String address;
}
5、@JsonFormat
- 时间格式化注解
pattern
: 表示日期的格式,比如:yyyy-MM-dd HH:mm:sstimezone
: 默认是GMT,中国需要GMT+8
- 中国时间(Asia/Shanghai) = 格林尼治时间(GMT)+ 8
- 格林尼治时间(GMT) = 世界协调时间(UTC) + 0
@Test
public void test6() throws JsonProcessingException {ObjectMapper objectMapper = new ObjectMapper();User user = new User();user.setAge(18);user.setName("张三");user.setAddress("北京");user.setBirthday(new Date());// 序列化为json字符串String jsonString = objectMapper.writeValueAsString(user);System.out.println(jsonString);// 反序列化为对象User userValue = objectMapper.readValue(jsonString, User.class);System.out.println(userValue);
}
@Data
public class User {private Integer age;private String name;@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")private Date birthday;private String address;
}
输出结果:
{"age":18,"name":"张三","birthday":"2024-07-18 22:10:36","address":"北京"}
User(age=18, name=张三, birthday=Thu Jul 18 22:10:36 CST 2024, address=北京)
6、@JsonPropertyOrder
- 用于指定实体生成json时的
属性顺序
// 自定义顺序
@JsonPropertyOrder({"name", "age", "address"})
//按字母排序
@JsonPropertyOrder(alphabetic=true)
四、高级特性
1、处理泛型
1.1、反序列化List泛型
- 可以使用
CollectionType
类型反序列化,也可以构造TypeReference
反序列化
@Test
public void test7() throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();CollectionType javaType = mapper.getTypeFactory().constructCollectionType(List.class, User.class);// 造数据List<User> list = new ArrayList<>();for (int i = 0; i < 3; i++) {User user = new User();user.setId((long) i);user.setName("张三" + i);list.add(user);}System.out.println("序列化");String jsonInString = mapper.writeValueAsString(list);System.out.println(jsonInString);System.out.println("反序列化:使用 javaType");List<User> userList1 = mapper.readValue(jsonInString, javaType);System.out.println(userList1);System.out.println("反序列化:使用 TypeReference");List<User> userList2 = mapper.readValue(jsonInString, new TypeReference<List<User>>() {});System.out.println(userList2);
}
@Data
public class User {private Long id;private String name;
}
输出:
序列化
[{"id":0,"name":"张三0"},{"id":1,"name":"张三1"},{"id":2,"name":"张三2"}]
反序列化:使用 javaType
[User(id=0, name=张三0), User(id=1, name=张三1), User(id=2, name=张三2)]
反序列化:使用 TypeReference
[User(id=0, name=张三0), User(id=1, name=张三1), User(id=2, name=张三2)]
1.2、反序列化Map泛型
- 可以使用
MapType
类型反序列化,也可以构造TypeReference
反序列化
@Test
public void test8() throws IOException {ObjectMapper mapper = new ObjectMapper();//第二参数是 map 的 key 的类型,第三参数是 map 的 value 的类型MapType javaType = mapper.getTypeFactory().constructMapType(HashMap.class, String.class, User.class);// 造数据Map<String, User> map = new HashMap<>();for (int i = 0; i < 3; i++) {User user = new User();user.setId((long) i);user.setName("张三" + i);map.put("key" + i, user);}System.out.println("序列化");String jsonInString = mapper.writeValueAsString(map);System.out.println(jsonInString);System.out.println("反序列化: 使用 javaType");Map<String, User> userMap1 = mapper.readValue(jsonInString, javaType);System.out.println(userMap1);System.out.println("反序列化: 使用 TypeReference");Map<String, User> userMap2 = mapper.readValue(jsonInString, new TypeReference<Map<String, User>>() {});System.out.println(userMap2);
}
输出结果:
序列化
{"key1":{"id":1,"name":"张三1"},"key2":{"id":2,"name":"张三2"},"key0":{"id":0,"name":"张三0"}}
反序列化: 使用 javaType
{key1=User(id=1, name=张三1), key2=User(id=2, name=张三2), key0=User(id=0, name=张三0)}
反序列化: 使用 TypeReference
{key1=User(id=1, name=张三1), key2=User(id=2, name=张三2), key0=User(id=0, name=张三0)}
2、自定义序列化和反序列化
- 序列化类继承抽象类
JsonSerializer
,需要的字段或类上
使用@JsonSerialize
注解 - 反序列化类继承抽象类
JsonDeserializer
,需要的字段或类上
使用@JsonDeserialize
注解
public class LongSerializer extends JsonSerializer<Long> {@Overridepublic void serialize(Long value, JsonGenerator gen, SerializerProvider serializers) throws IOException {gen.writeString(value.toString());}
}@Data
public class User {@JsonSerialize(using = LongSerializer.class)private Long id;private String name;
}
相关文章:
Jackson详解
文章目录 一、Jackson介绍二、基础序列化和反序列化1、快速入门2、序列化API3、反序列化API4、常用配置 三、常用注解1、JsonProperty2、JsonAlias3、JsonIgnore4、JsonIgnoreProperties5、JsonFormat6、JsonPropertyOrder 四、高级特性1、处理泛型1.1、反序列化List泛型1.2、反…...
【算法】字符串
快乐的流畅:个人主页 个人专栏:《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火,在为久候之人燃烧! 文章目录 引言一、最长公共前缀二、最长回文子串三、二进制求和四、字符串相乘 引言 字符串题,大多数是模…...
Python酷库之旅-第三方库Pandas(037)
目录 一、用法精讲 116、pandas.Series.div方法 116-1、语法 116-2、参数 116-3、功能 116-4、返回值 116-5、说明 116-6、用法 116-6-1、数据准备 116-6-2、代码示例 116-6-3、结果输出 117、pandas.Series.truediv方法 117-1、语法 117-2、参数 117-3、功能 …...
iOS 左滑返回事件的控制
0x00 视图结构 1-根视图 1.1-控制器A 1.1.1-控制器B 1.1.1.1-控制器C 0x01 控制 通过设置 self.navigationController.interactivePopGestureRecognizer.enabled 为 YES 或 NO 来控制当面界面,是否能左滑返回 在 控制器B 的生命周期方法内,设置属性 s…...
= null 和 is null;SQL中关于NULL处理的4个陷阱;三值逻辑
一、概述 1、NULL参与的所有的比较和算术运算符(>,,<,<>,<,>,,-,*,/) 结果为unknown; 2、unknown的逻辑运算(AND、OR、NOT)遵循三值运算的真值表; 3、如果运算结果直接返回用户,使用NULL来标识unknown 4、如…...
拖拽上传(预览图片)
需求 点击上传图片,或直接拖拽图片到红色方框里面也可上传图片,上传后预览图片 效果 实现 <!DOCTYPE html> <html lang"zh-cn"><head><meta charset"UTF-8"><meta name"viewport" content&…...
Oracle 12c新特性 In-Memory Column Store
Oracle 12c引入了一项重要的特性——In-Memory Column Store(简称IM或In-Memory),这一特性极大地提升了数据库在处理分析型查询时的性能。以下是关于Oracle 12c In-Memory特性的详细介绍: 一、基本概念 In-Memory Column Store&…...
【数据结构】二叉树———Lesson2
Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…...
mongodb数据导出与导入
一、先去检查mongodump mongodump --version 如果报 mongodump version: built-without-version-string 或者其他的较老的版本,直接去下载最新的【传送门】 【以Ubuntu18.04为例】 安装工具 假设你下载的是 .tgz 文件(适用于 Linux 系统)&am…...
电路学习——经典运放电路之滞回比较器(施密特触发器)(2024.07.18)
参考链接1: 电子设计教程29:滞回比较器(施密特触发器) 参考链接2: 滞回比较器电路详细分析 参考链接3: 比较器精髓:施密特触发器,正反馈的妙用 参考链接4: 比较器反馈电阻选多大?理解滞后效应,轻…...
NVIDIA Container Toolkit 安装与配置帮助文档(Ubuntu,Docker)
NVIDIA Container Toolkit 安装与配置帮助文档(Ubuntu,Docker) 本文档详细介绍了在 Ubuntu Server 22.04 上使用 Docker 安装和配置 NVIDIA Container Toolkit 的过程。 概述 NVIDIA 容器工具包使用户能够构建和运行 GPU 加速容器。即可以在容器中使用NVIDIA显卡。 架构图如…...
JavaWeb day01-HTML入门
Web前端 课程安排 HTML、CSS简介 HTML快速入门 实现标题排版 新闻标题样式...
驱动框架——CMSIS第一部分 RTE驱动框架介绍
一、介绍CMISIS 什么是CMSIS(cortex microcontrol software interface standard一种软件标准接口),官网地址:https://arm-software.github.io/CMSIS_6/latest/General/index.html 包含的core、driver、RTOS、dsp、nn等部分&…...
Debezium日常分享系列之:Debezium2.7版本PostgreSQL数据库连接器
Debezium日常分享系列之:Debezium2.7版本PostgreSQL数据库连接器 一、概述二、连接器的工作原理安全快照初始快照的默认工作流程行为临时快照触发临时增量快照触发临时阻塞快照增量快照增量快照流程Debezium 如何解决具有相同主键的记录之间的冲突快照窗口触发增量快照具有附加…...
保障信息系统安全保护等级调整期间的安全性
保障信息系统安全保护等级调整期间的安全性: 策略与实践 在当今数字化时代,信息系统已成为企业和组织运营的核心支撑。为了适应不断变化的业务需求和安全威胁环境,信息系统安全保护等级的调整成为必要之举。然而,这一调整过程可能…...
实战:shell编程之全量命令练习
概叙 槽点~~~~~~~! 往期shell相关文章回顾,有兴趣的可以自行阅读和练习。 科普文:一文搞懂Vim-CSDN博客 科普文:jvm笔记-CSDN博客 科普文:一天学会shell编程-CSDN博客 科普文:Linux服务器巡检小结_lin…...
在 CentOS 7 上编译安装 Python 3.11
安装必要的依赖 首先,你需要安装一些开发工具和库,以便编译 Python 和 OpenSSL: yum -y groupinstall "Development tools" yum install -y wget gcc-c pcre pcre-devel zlib zlib-devel libffi-devel zlib1g-dev openssl-devel …...
Qt 4.8.7 + MSVC 中文乱码问题深入分析
此问题很常见,然而网上关于此问题的分析大多不够深刻,甚至有错误;加之Qt5又更改了一些编码策略,而很多文章并未提及版本问题,或是就算提了,读者也不重视。这些因素很容易让读者产生误导。今日我彻底研究透了…...
IDEA的常见代码模板的使用
《IDEA破解、配置、使用技巧与实战教程》系列文章目录 第一章 IDEA破解与HelloWorld的实战编写 第二章 IDEA的详细设置 第三章 IDEA的工程与模块管理 第四章 IDEA的常见代码模板的使用 第五章 IDEA中常用的快捷键 第六章 IDEA的断点调试(Debug) 第七章 …...
arcgis怎么选取某个指定区域地方的数据,比如从全国乡镇数据选取长沙市乡镇数据
一共5个步骤,没一句废话,耐心看完。看完你就会在任何软件选取指定范围的数据了。 一、如图,先将数据加载到arcgis里面,我们要选取里面长沙市的范围数据。 二、选取长沙市的语句 “市” like ‘长沙%’ 切记,切记&…...
二、链表(1)
203.移除链表元素 创建一个虚拟哨兵头节点,就不用考虑原本头结点要不要删除 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def remove…...
KAFKA搭建教程
KAFKA搭建教程 期待您的关注 KAFKA学习笔记 帮助更多人 目录 KAFKA搭建教程 1.下载Kafka并解压 2.添加环境变量 3.修改 server.properties 文件 4.将kafka复制到其它节点 5.修改node1、node2节点的broker.id 6.将master的环境变量同步到node1、 node2 7.启动zookeeper…...
Linux网络——套接字与UdpServer
目录 一、socket 编程接口 1.1 sockaddr 结构 1.2 socket 常见API 二、封装 InetAddr 三、网络字节序 四、封装通用 UdpServer 服务端 4.1 整体框架 4.2 类的初始化 4.2.1 socket 4.2.2 bind 4.2.3 创建流式套接字 4.2.4 填充结构体 4.3 服务器的运行 4.3.1 rec…...
SpringBoot源码深度解析
今天,聊聊SpringBoot的源码,本博客聊的版本为v2.0.3.RELEASE。目前SpringBoot的最新版为v3.3.2,可能目前有些公司使用的SpringBoot版本高于我这个版本。但是没关系,因为版本越新,新增的功能越多,反而对Spri…...
【Qt】常用控件
文章目录 QWidgetenabledgeometrywindow framewindowTitlewindowIconqrc资源管理windowOpacitycursorfonttoolTipfocusPolicystyleSheet 按钮类PushButtonRadioButtonCheckBoxSignals 显示类LabelLCDNumberProgressBarCalendar 输入类LineEditTextEditComboBoxSpinBoxDateTimeE…...
electron 主进程和渲染进程通信
在Electron中,主进程(main process)和渲染进程(renderer process)之间的通信是非常重要的,因为Electron应用通常会将用户界面(由Web技术如HTML, CSS, 和JavaScript构建)和原生功能(如系统对话框、文件I/O等)分开处理。主进程管理应用的生命周期和创建渲染进程,而渲染…...
【ARM】MDK-解决CMSIS_DAP.DLL missing报错
【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 记录解决CMSIS_DAP.DLL missing的报错情况,对应相关报错信息,供后续客户参考,快速解决客户问题。 2、 问题场景 客户进行硬件调试时,发现Target设置内有CMSIS_DAP.DL…...
CSS 的环境变量函数env()
在CSS中,env() 函数并不是传统意义上的“环境变量”函数,如你在编程语言中可能遇到的那样。相反,env() 是CSS中的一个函数,它用于访问由宿主环境(如浏览器)提供给CSS的自定义属性(也称为环境变量…...
数学建模--国赛备赛---TOPSIS算法
目录 1.准备部分 1.1提交材料 1.2MD5码相关要求 2.TOPSIS算法 2.1算法概述 2.2基本概念 2.3算法核心思想 2.4拓展思考 3.适用赛题 3.1适用赛题说明 3.2适用赛题举例 4.赛题分析 4.1指标的分类 4.2数据预处理 4.2.1区间型属性的变换 4.2.2向量规范化 4.3数据加…...
均值滤波算法及实现
均值滤波器的使用场景: 均值滤波器使用于处理一些如上述蓝色线的高斯噪声场景 红色曲线是经过均值滤波处理后的数据。主要因为均值滤波设置数据缓冲区(也即延时周期),使得测量值经过缓冲不会出现特别大的变化。 黄色曲线为高斯噪声…...
唐山网站建设自主开发/快速整站排名seo教程
点击下载 转载于:https://blog.51cto.com/19880614/933589...
学做美食去哪个网站好/软文推广的标准类型
自动生成代码工具 模板文件 package ${javapackage}.po;/*** <p>${title}</p>* 类名:${className}PO<br>* 创建人:${author}<br>* 创建时间:${.now?string("yyyy-MM-dd")}<br>*/ public class ${className}PO {<#list javaPropert…...
wordpress 无法进入后台/网站排名优化快速
在 Linux 和 Windows 下给 Tomcat 分配大内存设置方法 - 偷得浮生半日闲 - 博客频道 - CSDN.NET在 Linux 和 Windows 下给 Tomcat 分配大内存设置方法2008-02-28 13:2712507人阅读评论(0)收藏举报其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4…...
做园林景观的网站/seo技术优化
由于口令密码容易泄露,SSH公钥登录相比口令登录更加安全。SSH可以轻松使用非对称加密技术给两台机子订立契约,步骤如下: 第一步 本地机生成秘钥对 指令:ssh-keygen 功能:在本地(~/.ssh/)产生公钥…...
优秀网站欣赏/如何免费制作网站
三层架构(3-tier architecture) 1、用户界面层(User Interface layer)2、业务逻辑层(Business Logic Layer)3、数据访问层(Data access layer)思想:高内聚低耦合面向接口设计的思想“抽屉”式架…...
有源码怎么在本地网站搭建/bt磁力搜索器
求职经验分享者Crydi:猴子数据分析学员成功入职金融行业数据分析师跳槽薪资提升30%你将收获:1、如何学习准备才能跳槽成功提升薪资?2、如何做一份面试官喜欢的简历?3、如何准备面试,才能让面试官对你刮目相看ÿ…...