YAML-02-yml 配置文件 java 整合使用 yamlbeans + snakeyaml + jackson-dataformat-yaml
java 中处理 yml 的开源组件是什么?
在Java中处理YAML(YAML Ain't Markup Language)格式的开源组件有很多,其中一些比较常用的包括:
SnakeYAML: SnakeYAML 是一个Java库,用于解析和生成YAML格式的数据。它支持YAML 1.1规范,并提供了一个简单易用的API,用于在Java应用程序中处理YAML数据。
GitHub 地址:https://bitbucket.org/asomov/snakeyaml
Maven依赖:
<dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId><version>1.29</version> </dependency>Jackson YAML: Jackson是一个流行的Java JSON处理库,它也提供了对YAML格式的支持。Jackson YAML模块允许你在Java对象和YAML之间进行转换。
GitHub 地址:https://github.com/FasterXML/jackson-dataformats-text
Maven依赖:
<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-yaml</artifactId><version>2.13.0</version> </dependency>YAMLBeans: YAMLBeans 是一个轻量级的Java库,用于将Java对象与YAML数据进行互相转换。它提供了简单的API,使得YAML数据的读写变得容易。
GitHub 地址:https://github.com/EsotericSoftware/yamlbeans
Maven依赖:
<dependency><groupId>net.sourceforge.yamlbeans</groupId><artifactId>yamlbeans</artifactId><version>1.14</version> </dependency>
这些开源库都提供了方便的方式来处理YAML格式的数据,你可以根据自己的需求选择其中一个进行使用。
对比表格
以下是SnakeYAML、Jackson YAML和YAMLBeans这三个Java中处理YAML格式的开源组件的对比表格:
| 特点 | SnakeYAML | Jackson YAML | YAMLBeans |
|---|---|---|---|
| 简单易用性 | 易用,提供简洁的API | 易用,与Jackson库集成,熟悉Jackson的用户可以方便使用 | 易用,提供简单的API |
| 性能 | 相对较慢 | 较快,性能较高 | 相对较慢 |
| 功能丰富性 | 中等,支持基本的YAML 1.1规范 | 高,支持丰富的特性,包括多文档处理、自定义类型等 | 低,功能较为基础 |
| 扩展性 | 中等,支持自定义标签和类型处理 | 高,支持自定义序列化和反序列化逻辑 | 低,较难扩展 |
| 与Java对象的绑定 | 易用,支持Java对象与YAML数据的转换 | 易用,通过Jackson库支持Java对象与YAML数据的转换 | 易用,支持Java对象与YAML数据的转换 |
| 流行度和社区支持 | 相对较高,有活跃的社区和用户群 | 非常高,Jackson是非常流行的Java JSON处理库之一 | 相对较低,较小的社区支持 |
选择使用哪个库取决于你的具体需求。如果你需要一个简单易用、轻量级的库,SnakeYAML是一个不错的选择。
如果你希望拥有更高的性能和丰富的特性,同时也需要支持JSON和其他数据格式,那么Jackson YAML是一个强大的工具。
如果你只需要基本的YAML处理功能,并且希望使用简单的API,YAMLBeans可以满足你的需求。
SnakeYAML
maven
<dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId><version>1.29</version>
</dependency>
入门
package com.github.houbb.yaml.test;import org.yaml.snakeyaml.Yaml;
import java.io.FileWriter;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;public class SnakeYAMLExample {public static void main(String[] args) throws IOException {// 定义一个Java对象Map<String, Object> data = new HashMap<>();data.put("name", "John Doe");data.put("age", 30);data.put("isEmployed", true);Map<String, Object> addressData = new HashMap<>();addressData.put("city", "New York");addressData.put("zip", "10001");data.put("address", addressData);// 将Java对象写入YAML文件try (FileWriter writer = new FileWriter("snakeyaml_output.yaml")) {Yaml yaml = new Yaml();yaml.dump(data, writer);System.out.println("YAML文件已生成。");} catch (IOException e) {e.printStackTrace();}// 从YAML文件中读取数据try (FileReader reader = new FileReader("snakeyaml_output.yaml")) {Yaml yaml = new Yaml();Map<String, Object> loadedData = yaml.load(reader);System.out.println("从YAML文件中读取的数据:" + loadedData);} catch (IOException e) {e.printStackTrace();}}
}
效果
address: {zip: '10001', city: New York}
name: John Doe
isEmployed: true
age: 30
Jackson YAML
maven
<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-yaml</artifactId><version>2.13.0</version>
</dependency>
java
package com.github.houbb.yaml.test;import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;public class JacksonYAMLExample {public static void main(String[] args) {// 定义一个Java对象Map<String, Object> data = new HashMap<>();data.put("name", "John Doe");data.put("age", 30);data.put("isEmployed", true);Map<String, Object> addressData = new HashMap<>();addressData.put("city", "New York");addressData.put("zip", "10001");data.put("address", addressData);// 将Java对象写入YAML文件try {ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());objectMapper.writeValue(new File("JacksonYAML_output.yaml"), data);System.out.println("YAML文件已生成。");} catch (IOException e) {e.printStackTrace();}// 从YAML文件中读取数据try {ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());Map<String, Object> loadedData = objectMapper.readValue(new File("JacksonYAML_output.yaml"), Map.class);System.out.println("从YAML文件中读取的数据:");System.out.println(loadedData);} catch (IOException e) {e.printStackTrace();}}}
效果
---
address:zip: "10001"city: "New York"
name: "John Doe"
isEmployed: true
age: 30
YAMLBeans
maven
<dependency><groupId>com.esotericsoftware.yamlbeans</groupId><artifactId>yamlbeans</artifactId><version>1.15</version>
</dependency>
java
package com.github.houbb.yaml.test;import com.esotericsoftware.yamlbeans.YamlReader;
import com.esotericsoftware.yamlbeans.YamlWriter;import java.io.FileWriter;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;public class YAMLBeansExample {public static void main(String[] args) {Map<String, Object> data = new HashMap<>();data.put("name", "John Doe");data.put("age", 30);data.put("isEmployed", true);Map<String, Object> addressData = new HashMap<>();addressData.put("city", "New York");addressData.put("zip", "10001");data.put("address", addressData);// 将 Java 对象写入 YAML 文件try (FileWriter writer = new FileWriter("YAMLBeans_output.yaml")) {YamlWriter yamlWriter = new YamlWriter(writer);yamlWriter.write(data);yamlWriter.close();System.out.println("YAML 文件已生成。");} catch (IOException e) {e.printStackTrace();}// 从 YAML 文件中读取数据try (FileReader reader = new FileReader("YAMLBeans_output.yaml")) {YamlReader yamlReader = new YamlReader(reader);Map loadedData = (Map) yamlReader.read();System.out.println("从 YAML 文件中读取的数据:");System.out.println(loadedData);} catch (IOException e) {e.printStackTrace();}}
}
输出
address: zip: 10001city: New York
name: John Doe
isEmployed: true
age: 30
小结
yaml 解析的组件比较多,可以选择自己合适的。
也可以考虑实现一个我们自己的 yaml 解析工具。
考虑技术的矩阵:
xml
property
json
csv
java-bean
相关文章:
YAML-02-yml 配置文件 java 整合使用 yamlbeans + snakeyaml + jackson-dataformat-yaml
java 中处理 yml 的开源组件是什么? 在Java中处理YAML(YAML Aint Markup Language)格式的开源组件有很多,其中一些比较常用的包括: SnakeYAML: SnakeYAML 是一个Java库,用于解析和生成YAML格式…...
【综述+LLMs】国内团队大语言模型综述:A Survey of Large Language Models (截止2023.11.24)
Github主页: https://github.com/RUCAIBox/LLMSurvey 中文版v10:https://github.com/RUCAIBox/LLMSurvey/blob/main/assets/LLM_Survey_Chinese.pdf 英文版v13: https://arxiv.org/abs/2303.18223 解析:大语言模型LLM入门看完你就懂了(一&…...
开始喜欢上了runnergo,JMeter out了?
RunnerGo是一款基于Go语言、国产自研的测试平台。它支持高并发、分布式性能测试。和JMeter不一样的是,它采用了B/S架构,更灵活、更方便。而且,除了API测试和性能测试,RunnerGo还加上了UI测试和项目管理等实用功能,让测…...
LLM - 大语言模型的分布式训练 概述
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/136924304 大语言模型的分布式训练是一个复杂的过程,涉及到将大规模的计算任务分散到多个计算节点上。这样做的目的是为了处…...
Spring Cloud Alibaba 整合Seata分布式事务
目录 前言步骤引入相关maven依赖添加相关配置Client端配置注册中心Server端配置注册中心Seata-Server相关配置启动seata-server 使用方法Seata AT 模式整体机制 步骤初始化表结构标记注解GlobalTransactional 总结 前言 在数字化转型的浪潮下,企业业务系统的复杂度…...
unity 多屏幕操作
想了解基础操作请移步:(重点是大佬写的好,这里就不再赘述) Unity 基础 之 使用 Display 简单的实现 多屏幕显示的效果_unity display-CSDN博客 在panel上也可以通过获取 Canvas,来达到切换多屏幕的操作, …...
4、Jenkins持续集成-用户权限和凭证管理
文章目录 一、用户权限管理1、安装用户权限管理插件2、开启权限全局安全配置3、创建角色4、创建用户5、给用户分配角色6、创建项目测试权限二、凭证管理1、安装凭证管理插件2、安装Git插件和工具2.1 用户密码类型2.2 SSH密钥类型一、用户权限管理 利用Role-based Authorizatio…...
K8s-网络原理-中篇
引言 本文是《深入剖析 K8s》的学习笔记,相关图片和案例可从https://github.com/WeiXiao-Hyy/k8s_example中获取,欢迎 ⭐️! 上篇主要介绍了 Flannel 插件为例,讲解了 K8s 里容器网络和 CNI 插件的主要工作原理。还有一种“纯三层”的网络方…...
vue基础——java程序员版(vue路由)
1、引入路由 在控制台执行vue ui,在插件市场里可以找到vue-router并导入。 一般情况下,vue会自动在main,js中引入vue-router,如下: import Vue from vue import App from ./App.vue import ./plugins/element.js import rou…...
【vue3学习之路(一)】
文章目录 前言一、vue3项目创建1.1环境准备1.1.1 基于 vue-cli 创建(脚手架创建)1.1.2 基于 vite 创建(推荐) 二、熟悉流程总结 前言 参考视频:https://www.bilibili.com/video/BV1Za4y1r7KE?p10&spm_id_frompag…...
基于Spring Boot网络相册设计与实现
摘 要 网络相册设计与实现的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品,体验高科技时代带给人们的方便,同时也能让用户体会到与以往常规产品不同的体验风格。 与安卓,iOS相比较起来&am…...
6 Spring-AOP
文章目录 1,AOP简介1.1 什么是AOP?1.2 AOP作用1.3 AOP核心概念 2,AOP入门案例2.1 需求分析2.2 思路分析2.3 环境准备2.4 AOP实现步骤步骤1:添加依赖步骤2:定义接口与实现类步骤3:定义通知类和通知步骤4:定义切入点步骤5:制作切面步骤6:将通知类配给容器…...
这回轮到鸿蒙禁用安卓了!!!
1月18日,鸿蒙生态千帆仪式上,华为正式宣布了HarmonyOS NEXT(下简称鸿蒙星河版或纯血鸿蒙)开发者预览已向开发者开放申请,纯血鸿蒙开始走向普及阶段。伴随着不再兼容安卓的纯血鸿蒙铺开,鸿蒙走进了运营属于自…...
Java问题详解
在Java中,问题可能涵盖多个领域,如基础知识、高级特性、设计模式、性能优化、并发编程等。下面,我将提供两个问题以及对它们的详细回答。请注意,2000字的要求可能过于庞大,我将尽量确保回答详细而不过于冗长。 问题1&…...
Go——指针和内存逃逸
区别于C/C中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。 要搞明白Go语言中的指针概念需要先知道3个概念:指针地址,指针类型和指针取值。 一. Go语言的指针 Go语言中的函数传参都是值拷贝,当我们想修改某个…...
PTA L2-032 彩虹瓶
彩虹瓶的制作过程(并不)是这样的:先把一大批空瓶铺放在装填场地上,然后按照一定的顺序将每种颜色的小球均匀撒到这批瓶子里。 假设彩虹瓶里要按顺序装 N 种颜色的小球(不妨将顺序就编号为 1 到 N)。现在工…...
Spring和Spring Boot之间的区别
Spring和Spring Boot之间的区别 不仅仅体现在操作简化、配置方式以及开发速度上,还有以下几个方面: 模块化和功能范围: Spring是一个完整的框架,提供了各种各样的功能,包括依赖注入、面向切面编程、数据访问、事务管…...
海外客户获取难?海外云手机助力电商引流!
海外电商面临的市场竞争激烈,如何在海外市场获客成为了摆在许多卖家面前的难题。而在这个问题的解决方案中,海外云手机崭露头角,成为助力电商引流的新利器。 在当前市场中,云手机主要用于游戏挂机,但其潜力在海外电商领…...
什么情况下 C++ 需要垃圾处理机制?
C,作为一种以性能和灵活性著称的编程语言,历来以其严谨的手动内存管理而闻名。然而,尽管C提供了丰富的工具如RAII(Resource Acquisition Is Initialization)原则、智能指针等来协助开发者有效地管理内存,但…...
流畅的 Python 第二版(GPT 重译)(七)
第十三章:接口、协议和 ABCs 针对接口编程,而不是实现。 Gamma、Helm、Johnson、Vlissides,《面向对象设计的第一原则》 面向对象编程关乎接口。在 Python 中理解类型的最佳方法是了解它提供的方法——即其接口——如 “类型由支持的操作定义…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
