在處理一些代碼庫時,我試着理解一段代碼以便能夠工作和定製它,我能夠理解近90%的代碼流。這裏是整體流程瞭解一段Java代碼
- 碼被用來生成15位代碼(字母數字),前3位是客戶提供。
- 最初代碼是生成16位數的字母數字數字並將其存儲在緩存中。
- 客戶可以通過指定數量生成任意數量的代碼。
- 所有客戶生成的代碼都是從16位數字(點2)生成的。所有生成的代碼都有來自該16位數字字母數字的數字/字母。
- 當有人試圖使用這些代碼時,系統試圖驗證提供的代碼是否有效。
我觸擊了在用於確定是否所提供的代碼是否有效,這裏的邏輯是,一段代碼,我被生成並存儲在生成6個碼作爲樣品,在這種情況下的字母數字代碼高速緩存是
initial-alphabet : M9W6K3TENDGSFAL4
代碼來生成基於initial-alphabet
是 myList中= [123-MK93-ES6D-36F3, 123-MK93-EFTW-D3LG, 123-MK93-EALK-TGLD, 123-MK93-ELKK-DN6S, 123-MK93-E4D9-3A6T, 123-MK93-EMTW-LNME]
protected int getVoucherNumber(String voucherCode){
int voucherNumberPos = voucherCode.length() - 12;
String voucherNumberHex = voucherCode.substring(voucherNumberPos, voucherNumberPos + 6);
int firstByte = getIntFromHexByte(voucherNumberHex.substring(0, 2), 0);
int secondByte = getIntFromHexByte(voucherNumberHex.substring(2, 4), 1);
int thirdByte = getIntFromHexByte(voucherNumberHex.substring(4, 6), 7);
return firstByte << 16 | secondByte << 8 | thirdByte;
}
private int getIntFromHexByte(String value, int offset){
return (getIntFromHexNibble(value.charAt(0), offset) << 4) + getIntFromHexNibble(value.charAt(1), offset + 4);
}
private int getIntFromHexNibble(char value, int offset){
int pos = getAlphabet().indexOf(value);
if (pos == -1) {// nothing found}
pos -= offset;
while (pos < 0) {
pos += 16;
}
return pos % 16;
}
這裏是其試圖驗證共同的代碼德
int voucherNumber = getVoucherNumber(kyList.get(4));
在voucherNumber
這種情況下的值是4
即,從列表中的第四元素,在情況下,我通過這是不列表getVoucherNumber
方法的一部分返回一個較高的值(比表計數值的任何值)。
之一,其困惑我最主要的事情是這兩條線
int voucherNumberPos = voucherCode.length() - 12;
String voucherNumberHex = voucherCode.substring(voucherNumberPos, voucherNumberPos + 6);
按我的理解,他們首先移動了從這些客戶提供的,但他們又沒有使用檢查前3位字符串的其餘部分,但只是字符串的特定部分。
任何一個可以幫助我瞭解這個
爲什麼被標記爲java8?此代碼示例中是否有關於Java 8的特定內容?我沒有看到它,但也許我錯過了它... – FrustratedWithFormsDesigner 2014-10-08 18:38:04
@FrustratedWithFormsDesigner:沒有任何與java-8相關的,我錯誤地標記它,謝謝糾正 – 2014-10-09 01:58:25