wast高性能 Java 库

联合创作 · 2023-10-01 07:22

wast 是一个轻量级且高性能 java 语言开发框架和工具包,集成了最快的json库之一和最快的yaml 解析库,代码轻量,无任何依赖。


 


功能



  1. 内置json模块在性能评测上远远超过曾经的fastjson和jackson,即使是和fastjson2的最新版本性能评测中也能占据明显的领先优势;

  2. 内置yaml解析库性能是snakeyaml的5-20倍;

  3. 内置表达式引擎解析性能比现有的spel高0.5倍左右;


JSON使用方法


// 序列化
Map map = new HashMap();
map.put("msg", "hello, light json !");
String result = JSON.toJsonString(map);

// 序列化到文件
Map map = new HashMap();
map.put("msg", "hello, light json !");
JSON.writeJsonTo(map, new File("/tmp/test.json"));

// 格式化输出
Map map = new HashMap();
map.put("name", "zhangsan");
map.put("msg", "hello, light json !");
JSON.toJsonString(map, WriteOption.FormatOut);

// 反序列化map
String json = "{\"msg\":\"hello, light json !\",\"name\":\"zhangsan\"}";
Map map = (Map) JSON.parse(json);
System.out.println(map);

// 反序列化到指定类型
String json = "{\"msg\":\"hello, light json !\",\"name\":\"zhangsan\"}";
Map map = JSON.parseObject(json, Map.class);
System.out.println(map);


// IO流读取解析
Map result = null;

// 1 读取网络资源 GET
result = JSON.read(new URL("https://developer.aliyun.com/artifact/aliyunMaven/searchArtifactByGav?groupId=spring&artifactId=&version=&repoId=all&_input_charset=utf-8"), Map.class);

// 2 读取输入流
InputStream inputStream = InputStreamTest.class.getResourceAsStream("/sample.json");
result = JSON.read(inputStream, Map.class);

// 3 读取文件
result = JSON.read(new File("/tmp/smaple.json"), Map.class);

YAML使用方法


    // yaml字符串
String yamlStr = StringUtils.fromResource("/yaml/t2.yaml");

// 读取文档
YamlDocument yamlDoc = YamlDocument.parse(yamlStr);

// 转换为properties
Properties properties = yamlDoc.toProperties();
System.out.println(properties);

// 转换为map
yamlDoc.toMap();

// 转化为指定bean
YamlTest bean = yamlDoc.toEntity(YamlTest.class);

// 获取根节点
YamlNode yamlRoot = yamlDoc.getRoot();

// 查找node
YamlNode nameNode = yamlRoot.get("/metadata/name");

// 获取/metadata/name
String metadataName = yamlRoot.getPathValue("/metadata/name", String.class);
// 或者 nameNode.getValue();
System.out.println(" metadataName " + metadataName);

// 修改
yamlRoot.setPathValue("/metadata/name", "this is new Value ");

String newMetadataName = (String) nameNode.getValue();
System.out.println(newMetadataName.equals("this is new Value "));

// 反向序列化生成yaml字符串
System.out.println(yamlDoc.toYamlString());

// 输出到文件
yamlDoc.writeTo(new File("/tmp/test.yaml"));

表达式引擎


// 直接运行
Expression.eval("1+1"); // 输出2
Expression.eval("1+1+'a'"); // 输出2a

Map map = new HashMap();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
Expression.eval("a+b+c",map); // 输出6

// 解析运行
Map map = new HashMap();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
Expression varExpr = Expression.parse("a + b + c"); // 只需要解析一次
varExpr.evaluate(map); // 输出6

map.put("c", 30);
varExpr.evaluate(map); // 输出33

// 函数使用
Map context = new HashMap();
context.put("tip", "1 ");
context.put("name", "zhangsan, %s");
context.put("msg", "hello");
context.put("type", 1);
context.put("a", 1);
context.put("b", 12);
context.put("c", 111);
context.put("B6_AvgCpuUsed", 1.0);
context.put("B5_AvgCpuUsed", 2.0);
context.put("B4_AvgCpuUsed", 3.0);
context.put("vars", new String[] {"hello"});

EvaluateEnvironment evaluateEnvironment = EvaluateEnvironment.create(context);
evaluateEnvironment.registerStaticMethods(Math.class, String.class);
evaluateEnvironment.registerFunction("min", new ExprFunction<Object, Number>() {
@Override
public Number call(Object... params) {
Arrays.sort(params);
return (Number) params[params.length - 1];
}
});


System.out.println( Expression.eval("@min(@sum(a,b,c), 50, 125, 2, -11)", evaluateEnvironment));
System.out.println( Expression.eval("@max(@sum(a,b,c), 50, 125, 55, 152)", evaluateEnvironment));


浏览 26
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报