JavaScript翻译成Java

java

这两天公司有一个需求,将一段加密的JavaScript代码转换为JAVA版。

 

JavaScript中的某一段代码:

   

  前期查看了整个JavaScript代码,发现代码中,方法里面嵌套方法,各种不合规的变量名,导致开始就怀疑到底是否能够翻译成功,很想放弃

  中期决定按照整个JavaScript的代码结构,重头开始翻译。

  后期完成对整个JavaScript的翻译,编写测试方法,结合Java调试和JavaScript调试,让两个语言的测试结果达到一致

 

总结Java与JavaScript中差异:

 

  1。JavaScript中if判断的条件可以不是boolean类型,对于int的类型,非0就是true,0就是false。既Java中可以通过 int a = 1; if(a!=0) 来代替Javascript中的if(a)

  2。JavaScript中的parseInt("12",10)对应Java的Integer.parseInt("12",10)方法

  3。JavaScript获得数值的二进制: str1.charAt(i).charCodeAt().toString(2)

     Java中获得数值的二进制:Integer.toBinaryString((int)str1.charAt(i))

  4。JavaScript中直接在空白处调用函数初始化,Java中必须定义在static块中进行初始化

  5。JavaScript中String.fromCharCode获得数值对应的Unicode字符,Java中通过Character.toChars()获得数组,不过传入的是一个数组,所以需要转换成字符串,通过String.valueOf()方法

      6。JavaScript中的Math.ceil(bits/bpe)函数,bits/bpe如果除不尽会有小数,但是在JAVA中两个整数相除不会有小数(余数),所以需要把其中一参数改成double类型再进行相除,Math.ceil(((double) bits / bpe)

 

JS函数:

 

改造后的Java函数:

     

第二种方案构思:

 

  通过Java的第三方支持或者Jar调用JavaScript函数实现:

    大致思路:1。读取JavaScript文件,2。构建JavaScript环境(类似于浏览器编译脚本),3。执行函数返回结果。

 

     private static final String JS_FILE_PATH = "D:\\xxxxx.js";   // 读取js文件

private static final ScriptEngineManager manager = new ScriptEngineManager();

private static final String ENCRYPT_METHOD = "EncryptAPin";

public static String encrypt(String pwd){

FileReader reader = null;

try {

ScriptEngine engine = manager.getEngineByName("javascript");

reader = new FileReader(JS_FILE_PATH); // 执行指定脚本

engine.eval(reader);

if(engine instanceof Invocable) {

Invocable invoke = (Invocable)engine;

return (String) invoke.invokeFunction(ENCRYPT_METHOD, pwd);

}

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (NoSuchMethodException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (ScriptException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally {

if(reader != null){

try {

reader.close();

} catch (IOException e) {

e.printStackTrace();

}finally {

reader = null;

}

}

}

return StringUtils.EMPTY;

}

  

 

 

 

以上是 JavaScript翻译成Java 的全部内容, 来源链接: utcz.com/z/394095.html

回到顶部