JavaScript翻译成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