我愛學習網-上傳
當前位置: 主頁 > 文庫 > Java >

JavaScript翻譯成Java

時間:2020-09-04 15:12來源:我愛學習網 作者:apple 點擊:

將一段加密的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;
}

 

------分隔線----------------------------
    ?分享到??
看看啦
主站蜘蛛池模板: 亚洲AV无码一区二区乱子伦| 相泽亚洲一区中文字幕| 亚洲日本一区二区三区| 亚洲一区二区三区在线观看精品中文| 一区二区手机视频| 99久久精品国产高清一区二区| 中文字幕无码一区二区免费| 午夜福利一区二区三区在线观看 | 无码aⅴ精品一区二区三区浪潮| 亚洲av午夜福利精品一区 | 国产福利91精品一区二区| 99无码人妻一区二区三区免费 | 亚洲免费视频一区二区三区| 中文字幕一区二区三区永久| 69久久精品无码一区二区| 国产综合无码一区二区色蜜蜜| 国产伦一区二区三区高清| 亚洲视频一区在线| 精品久久久中文字幕一区| 亚洲日韩精品一区二区三区无码| 精品国产一区二区三区麻豆| 一区二区国产在线播放| 亚洲中文字幕在线无码一区二区| 国产成人一区二区精品非洲 | 国产91久久精品一区二区| 国产精品一区二区三区久久| 国产丝袜美女一区二区三区| 女同一区二区在线观看| 国产在线一区二区| 国产成人无码精品一区不卡| 蜜桃视频一区二区三区在线观看| 国产亚洲福利一区二区免费看| 性无码免费一区二区三区在线| 国产女人乱人伦精品一区二区| 亚洲国产成人一区二区精品区| 国产精品伦子一区二区三区| 中文字幕一区二区三区精彩视频 | 91午夜精品亚洲一区二区三区| 一区二区三区视频网站| 中文字幕日韩一区二区不卡 | 精品无码中出一区二区|