首頁 > Java > java教程 > 主體

為什麼將位元組數組轉換為字串並返回會導致資料遺失?

Mary-Kate Olsen
發布: 2024-11-24 01:24:10
原創
221 人瀏覽過

Why Does Converting a Byte Array to String and Back Result in Data Loss?

將位元組數組轉換為字串並返回位元組數組的問題

儘管對此主題進行了大量討論,但對於某些人來說,仍然存在一個持續存在的挑戰:轉換將位元組數組轉換為字串,然後返回位元組數組,而不會導致位元組數組不匹配。當個人嘗試將加密資料作為字串而不是位元組數組進行操作時,問題就會出現。

在提供的程式碼範例中,使用位元組數組時,加密和解密過程可以順利運作。但是,當將位元組數組轉換為字串並返回時,生成的位元組數組與原始位元組數組有所不同。因此,解密過程失敗。包括 UTF-8 和 UTF-16 在內的多種字串編碼已經過測試,但沒有成功。

理解差異

根本問題源自於字串的本質和位元組數組。字串設計用於表示人類可讀的文本,而不是原始的二進位資料。當加密資料儲存在字串中時,它會引入潛在的差異。

避免資料遺失

為了防止轉換過程中資料遺失,使用維護一個的編碼至關重要位元組和字元之間的一對一對應。其中一種編碼是 ISO-8859-1,它保證每個位元組序列對應於特定的字元序列,反之亦然。

使用ISO-8859-1 優化的程式碼

為了解決UTF-16 的問題(由於兩個主要原因而失敗),以下程式碼摘錄示範了使用ISO-8859-1:

    String decoded = new String(encryptedByteArray, "ISO-8859-1");
    System.out.println("decoded:" + decoded);

    byte[] encoded = decoded.getBytes("ISO-8859-1"); 
    System.out.println("encoded:" + java.util.Arrays.toString(encoded));

    String decryptedText = encrypter.decrypt(encoded);
登入後複製

以上是為什麼將位元組數組轉換為字串並返回會導致資料遺失?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板