2014-12-02 36 views
2

我很抱歉讓人困惑的標題,但我無法弄清楚如何用更好的問題來描述我的問題。從字符串到長陣列的轉換和返回不起作用

我正在寫一個程序,將一個字符串轉換爲一個應該是可逆的長向量(讀取信息)。轉換爲長陣列似乎對我來說很好。我使用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一樣工作?

如果您願意,我可以發佈我正在使用的測試用例來嘗試驗證此代碼。

回答

1

在你long2str方法,更改:

String s = Arrays.toString(chArray); 

到:

String s = new String(chArray); 

當您使用Arrays.toString()你所得到的形式[Y, W, J, j, Z, G, V, m, Z, 2, h, ...],這不是一個有效的基本64字符串的String。要獲取包含chArray所有字符的String,應使用適當的String構造函數。

相關問題