我需要的只是将byte []转换为String。然后用该字符串做一些事情并转换回byte []数组。但在这个测试中,我只是将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图片所以转换的字符串是不可读的。提前谢谢。
答案 0 :(得分: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
答案 1 :(得分:0)
原始数组实际上是对象(这就是为什么它们具有.equals方法)但是它们没有实现比较所需的相等性(hashCode和equals)。您也不能使用==因为根据文档,.getBytes将返回一个新的实例byte []。您应该使用Arrays.equals(byteEntity,byteTest)来测试相等性。
答案 2 :(得分:0)
查看答案here。
在那种情况下,我的目标是在字节流中转换png图像以在嵌入式浏览器中显示它(这是浏览器没有直接显示png的特殊情况)。
您可以使用该解决方案的逻辑将png转换为byte,然后转换为String。
然后反转操作顺序以返回原始文件。