2

必要なのは、byte[] を String に変換することだけです。次に、その文字列で何かを行い、byte[] 配列に変換します。しかし、このテストでは、byte[] を文字列に変換し、byte[] に戻すだけで、結果が異なります。

これを使用してバイト[]を文字列に変換するには:

byte[] byteEntity = EntityUtils.toByteArray(entity);
String s = new String(byteEntity,"UTF-8");

それから私は試しました:

byte[] byteTest = s.getBytes("UTF-8");

それから私はそれを比較しました:

if (byteEntity.equals(byteTest) Log.i("test","equal");
else Log.i("test","diff");

だから結果が違う。

これについてstackoverflowで検索しましたが、私の場合と一致しません。ポイントは、私のデータが.png画像であるため、変換された文字列が読めないことです。前もって感謝します。

4

3 に答える 3

1

解決済み

このようなものを使用します。

byte[] mByteEntity = EntityUtils.toByteArray(entity);
byte[] mByteDecrypted = clip_xor(mByteEntity,"your_key".getBytes());
baos.write(mByteDecrypted);
InputStream in = new ByteArrayInputStream(baos.toByteArray());

これは関数 clip_xor です

protected byte[] clip_xor(byte[] data, byte[] key) {
    int num_key = key.length;
    int num_data = data.length;

    try {
        if (num_key > 0) {
            for (int i = 0, j = 0; i < num_data; i++, j = (j + 1)
                    % num_key) {
                data[i] ^= key[j];
            }
        }
    } catch (Exception ex) {
        Log.i("error", ex.toString());
    }
    return data;
}

これが誰かが同じ問題に直面するのに役立つことを願っています。これを解決するのを手伝ってくれてありがとう。

P'krit_s に感謝します

于 2012-05-09T02:35:29.157 に答える
0

プリミティブ配列は実際にはオブジェクトです(そのため、.equalsメソッドがあります)が、比較に必要な等式のコントラクト(hashCodeおよびequals)を実装していません。ドキュメントによると、.getBytesは新しいインスタンスbyte []を返すため、==を使用することもできません。同等性をテストするには、Arrays.equals(byteEntity、byteTest)を使用する必要があります。

于 2012-05-08T07:30:08.343 に答える
0

ここで答えを見てください。

その場合、私のターゲットは、バイトストリーム内の png 画像を変換して、組み込みブラウザーに表示することでした (ブラウザーが png を直接表示しなかった特定のケースでした)。

そのソリューションのロジックを使用して、png をバイトに変換してから文字列に変換できます。

次に、操作の順序を逆にして、元のファイルに戻します。

于 2012-05-08T07:33:36.843 に答える