【aviator】aviator 报错 EOF while reading string at index

在这里插入图片描述

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\" ";
原创文章 1444 获赞 480 访问量 175万+

猜你喜欢

转载自blog.csdn.net/qq_21383435/article/details/106096669