バイト配列を文字列に変換したり、その逆に変換したりするとデータが失われるのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-24 01:24:10
オリジナル
220 人が閲覧しました

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

バイト配列を文字列に変換し、バイト配列に戻す際の問題

このトピックについては数多くの議論にもかかわらず、一部の人にとって根強い課題が残っています。バイト配列を文字列に変換し、バイト配列に戻すと、バイト配列の不一致は生じません。この問題は、個人が暗号化されたデータをバイト配列ではなく文字列として操作しようとした場合に表面化します。

提供されたコード例では、バイト配列を使用すると暗号化と復号化のプロセスがスムーズに動作します。ただし、バイト配列を文字列に変換し、その逆を行うと、結果のバイト配列は元のものとは異なります。その結果、復号化プロセスは失敗します。 UTF-8 や UTF-16 などのいくつかの文字列エンコーディングはテストされましたが、成功しませんでした。

矛盾を理解する

根本的な問題は文字列の性質に起因していますそしてバイト配列。文字列は、生のバイナリ データではなく、人間が読めるテキストを表すように設計されています。暗号化されたデータを文字列に保存すると、不一致が生じる可能性があります。

データ損失の回避

変換中のデータ損失を防ぐには、1 を維持するエンコーディングを使用することが重要です。バイトと文字間の 1 対 1 マッピング。そのようなエンコーディングの 1 つが ISO-8859-1 で、すべてのバイト シーケンスが特定の文字シーケンスに対応すること、およびその逆が保証されます。

ISO-8859-1 による最適化コード

主な 2 つの理由で失敗する 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート