1.背景
一段代码测试性能报错
@Test
public void aviatorPatternPerformanceTest21() throws Exception {
String rule = "(securityEyeLogType == \"1\" || dataType == \\\"traffic\\\") \n" +
"&& appProtocol == \\\"http\\\" ";
AviatorEvaluator.setOptimize(AviatorEvaluator.EVAL);
Expression compile = AviatorEvaluator.compile(rule);
int count = 10000 * 1000;
Map<String, Object> env = new HashMap<String, Object>();
long start = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
env.put("securityEyeLogType", "" + i);
env.put("dataType", "dataType" + i);
env.put("appProtocol", "appProtocol" + i);
env.put("requestUrl", "requestUrl" + i);
env.put("requestMethod", "requestMethod" + i);
env.put("direction", "direction" + i);
Object result = compile.execute(env);
env.clear();
}
long end = System.currentTimeMillis();
long interval = (end - start) / 1000;
long avg = count / interval;
System.out.println("总耗时秒:" + interval);
System.out.println("每秒处理条数:" + avg);
}
错误如下
com.googlecode.aviator.exception.CompileExpressionErrorException: EOF while reading string at index: 83
at com.googlecode.aviator.lexer.ExpressionLexer.scan(ExpressionLexer.java:366)
at com.googlecode.aviator.parser.ExpressionParser.move(ExpressionParser.java:840)
at com.googlecode.aviator.parser.ExpressionParser.isOPVariable(ExpressionParser.java:544)
at com.googlecode.aviator.parser.ExpressionParser.factor(ExpressionParser.java:576)
at com.googlecode.aviator.parser.ExpressionParser.unary(ExpressionParser.java:457)
at com.googlecode.aviator.parser.ExpressionParser.term(ExpressionParser.java:404)
at com.googlecode.aviator.parser.ExpressionParser.expr(ExpressionParser.java:386)
at com.googlecode.aviator.parser.ExpressionParser.shift(ExpressionParser.java:349)
at com.googlecode.aviator.parser.ExpressionParser.rel(ExpressionParser.java:319)
at com.g
这是因为转义了两次,一次就可以了,改成如下
String rule = "(securityEyeLogType == \"1\" || dataType == \"traffic\") \n" +
"&& appProtocol == \"http\" ";