Java 库 wast v0.0.28 发布
WAST 是一个高性能 Java 工具集库包,包括 JSON、YAML、CSV、HttpClient、JDBC 和 EL 引擎.
JSON 全场景性能优化到了极致,全场景包括 JDK6-JDK24,内容包括短 JSON,中长 JSON 以及超长 JSON 读写性能,以及输入流按需解析等等。
源码地址
- gitee: https://gitee.com/xiaoch0209/wast
- github: https://github.com/wycst/wast
性能测试:
- gitee: https://gitee.com/xiaoch0209/wast-jmh-test
- github: https://github.com/wycst/wast-jmh-test
- JSON 与 simdjson-java 对比: JSON 性能测试之二 - wastjson 每秒 6GB 解析速度完胜 simdjson-java
- 表达式性能测试 1: WastEl 表达式引擎性能测试 - 每秒千万次运算超强性能 - OSCHINA - 中文开源技术交流社区
- 表达式性能测试 2: express-benchmark・闲。大赋 (李家智)/Beetl - 码云 - 开源中国
v0.0.27 & v0.0.28 更新内容
v0.0.27
- [JDBC] - 支持KINGBASEES(使用mysql方言);
- [COMMON] - 修复驼峰转驼峰问题(已是驼峰的字符串继续转驼峰问题);
- [El引擎] - 表达式静态数组添加[]支持, []和原来的{}用法一致,例如{'a', 'b'}和['a', 'b']一样,并调整输出由原来的数组改为ArrayList类型方便方法调用;
- [Clients] -http SSE客户端支持;
- [Yaml] -修复yaml序列化value为null报错问题;
- JSON提供JSON.parseDouble方法(性能优于JDK内置的Double.parseDouble)
- JSON提供JSON.toString(double/float)(性能在JDK21以下远优于JDK内置的Double.toString,JDK21以上稍优)
v0.0.28
- JSON针对枚举类的解析支持单引号;
- JSON浮点数(float & double)序列化最短序列优化;
SSE java客户端示例
HttpClient httpClient = new HttpClient();
Map<String, Object> headers = new HashMap<String, Object>();
headers.put("authorization", "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOiIxIiwicGNvZGUiOiI3MDAxIiwidW4iOiJkZXYiLCJybiI6IueuoeeQhuWRmCIsInJpZCI6ImF2bHNHYW1DY0dhdGNEYmlLUUkiLCJleHAiOjE3NTkxNTg2MDgsIm1ybGUiOiIwIiwidGlkIjoiZGVmYXVsdF90ZW5hbnQifQ.kl2oNVb2mlmSctPWCFC9MlhHS3pdatl2IptgyPCFZag");
headers.put("client-id", "f7cce9099aadc57e677e548f34d0a4a9");
headers.put("Connection", "keep-alive");
headers.put("assistant-key", "langchat-8c2f9bab5c1147fc90aa00dadc679382");
String json = "{\"conversationId\":\"1c76578e-30ed-4eac-b5ba-b4f62a9ea004\",\"messages\":[{\"role\":\"user\",\"content\":\"你能做什么?\"}]}";
HttpClientConfig clientConfig = HttpClientConfig.create()
.headers(headers)
.contentType("application/json")
.jsonBody(json) // 自动设置 application/json,支持直接传入对象或者序列化好的JSON字符串(内部自动检测)
.retry(-1, 10) // 重试参数: -1代表无限次重连, 10为每次重连间隔
.responseStream(true); // 开启流式
String url = "http://192.168.1.146:30080/v1/chat/completions";
EventSourceHandler eventSourceHandler = httpClient.eventSource(url, HttpClientMethod.POST, clientConfig, new EventSourceCallback() {
@Override
public void onmessage(EventSourceMessage message) {
System.out.println("data: " + message.getData());
}
@Override
public void onerror(Throwable throwable) {
// throwable.printStackTrace();
}
@Override
public void onopen(HttpClientResponse response) {
System.out.println("open " + response);
}
@Override
public void onclose() {
System.out.println("close");
}
});
更多使用文档地址