我很抱歉讓人困惑的標題,但我無法弄清楚如何用更好的問題來描述我的問題。從字符串到長陣列的轉換和返回不起作用
我正在寫一個程序,將一個字符串轉換爲一個應該是可逆的長向量(讀取信息)。轉換爲長陣列似乎對我來說很好。我使用base 64作爲中間步驟,以便以更好的方式創建字節數,以處理其他必須執行的處理部分。
public long[] str2long(String s)
{
final byte[] authBytes = s.getBytes(StandardCharsets.UTF_8);
final String encoded = Base64.getEncoder().encodeToString(authBytes);
long[] array = new long[encoded.length()];
int i=0;
for(char c: encoded.toCharArray()){
array[i] = (long) c;
// System.out.print(array[i] + " ");
i++;
}
return array;
}
的問題是,即使強硬下面的代碼看起來是上述代碼的精確逆,在現實中是不和底座64背面轉換給出了這樣的錯誤:Illegal base64 character 5b
。
public String long2str(long[] array)
{
char[] chArray = new char[array.length];
int i=0;
for(long c: array){
chArray[i] = (char) c;
i++;
}
String s = Arrays.toString(chArray);
final byte[] decoded= Base64.getDecoder().decode(s);
try {
s = new String(decoded, "UTF-8");
return s;
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(Encryption.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
所以,我的問題是:
是什麼在,我很想念第二種方法有什麼不同?我認爲這可能是StandardCharsets.UTF_8
,但我不確定。
我該如何使此功能long2str(long[] array)
像 long2str(str2long(String s)) == String s
一樣工作?
如果您願意,我可以發佈我正在使用的測試用例來嘗試驗證此代碼。