Добрый день. У меня есть файл, который я храню в ресурсах приложения, а именно в raw. В данном файле размещены массив байт, как я понимаю, он в текстовом формате. Мне нужно считать его и преобразовать в массив байт.
Вот так выглядит файл:
...
:200020000000000000000000000000001F020008210200080000000023020008714A00087C :2000400027020008290200082B0200082D0200082F020008310200083302000835020008E0 :2000600037020008390200083B0200083D0200083F02000841020008430200084502000840
...
Я открываю файл и записываю его содержимое в массив my_array
, однако при выведении содержимого массива в логи, конечно же отображается далеко не желаемый результат. Что-то мне подсказывает, что проблемы где-то на этом этапе :)
Как я понимаю, перед записыванием элемента из файла в массив байт, его нужно преобразовывать (так ли это???). Вообщем, подскажите пожалуйста что я делаю не так и как сделать правильно.
String filename = "file_name";
int id = getResources().getIdentifier(filename, "raw", getPackageName());
byte[] my_array;
try {
my_array = getText(id, context);
} catch (IOException e) {e.printStackTrace();}
Метод getText:
public byte[] getText(int id, Context context) throws IOException {
Resources resources = context.getResources();
InputStream is = resources.openRawResource(id);
ByteArrayOutputStream bout = new ByteArrayOutputStream();
byte[] readBuffer = new byte[2 * 1024 * 1024];
try {
int read;
do {
read = is.read(readBuffer, 0, readBuffer.length);
if(read == -1) {
break;
}
bout.write(readBuffer, 0, read);
} while(true);
return bout.toByteArray();
} finally {
is.close();
}
}
Ваш код интепретирует текст как символы (char) и записывает их бинарное представление в ByteArrayOutputStream. Если исходный файл содержит текст в HEX формате, то следует конвертировать этот hex в байты.
byte[] hexToBinary(String str){
byte[] data = new byte[str.length()/2];
for(int i=0; i < data.length; i++){
data[i] = (byte) ((Character.digit(str.charAt(2*i), 16) << 4)
+ Character.digit(str.charAt(2*i+1), 16));
}
return data;
}
В эту функцию передать строку из байтов полученных из is.read(readBuffer, 0, readBuffer.length);
и уже результат записать в ByteArrayOutputStream.
do {
read = is.read(readBuffer, 0, readBuffer.length);
if(read == -1) {
break;
}
String hex = new String(readBuffer);
byte[] data = hexToBinary(hex);
bout.write(data);
} while(true);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть JSON со сложной структурой, у которого в значении поля есть символ кавычек или другой спецсимвол
Пишу android приложение по замене фона фотоВ нем должен быть магазин фонов, которые можно загрузить с сервера
После переключения сети (например, с Wifi на мобильную сеть), сокет выдает ошибку
При запросе данные не извлекаютсяЕсли условие не срабатывает-все работает и извлекаются все записи с помощью только даты