Преобразование byte[] в строку и обратно

Рейтинг: 1Ответов: 2Опубликовано: 19.02.2015

Что я делаю не так?

Bitmap bmp = ...
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 85, stream);
byte[] bytes = stream.toByteArray();
Arrays.equals(bytes, new String(bytes).getBytes()); // false

Ответы

▲ 2Принят

Не очень, конечно, понимаю потайной смысл этого выражения

Arrays.equals(bytes, new String(bytes).getBytes()); // false

Но прокомментирую:

Во-первых, вы, наверное, не в курсе, что не каждый набор байтов можно транслировать в строку. Так что new String(bytes) может вернуть все что угодно, например, обрезать нетранслированные байты. Как говорит мануал:

The behavior of this constructor when the given bytes are not valid in the default charset is unspecified.

Во-вторых, здесь упущен один очень важный параметр - кодировка, по умолчанию применяется текущая кодировка платформы, что делает код нетранспортабельным. В разных платформах/устройствах результат будет разный.

▲ 1

Не знаю, что вы делаете не так.

byte[] bytes = {0,1,2,3,4,5,6};
boolean equals = Arrays.equals(bytes, new String(bytes).getBytes());
Log.e("EQUALS", String.valueOf(equals));//true