Заменить эту строку: getResources().getDrawable(R.drawable.your_drawable)
с ResourcesCompat.getDrawable(getResources(), R.drawable.your_drawable, null)
EDIT
ResourcesCompat
также устарела. Но вы можете использовать это:
ContextCompat.getDrawable(this, R.drawable.your_drawable)
(Здесь this
- это контекст)
для получения более подробной информации по этой ссылке: ContextCompat
К моему знанию Java вынуждает Вас считать файл как байты, а не способность заблокировать чтение. При сериализации объектов Java это была бы другая история.
другие примеры, показанные использование класс DataInputStream с Файлом, но можно также использовать ярлык: класс RandomAccessFile :
RandomAccessFile in = new RandomAccessFile("filename", "r");
int version = in.readInt();
byte type = in.readByte();
int beginOfData = in.readInt();
byte[] tempId;
in.read(tempId, 0, 16);
String id = new String(tempId);
Примечание, что Вы могли превратить объекты ответа в класс, если это облегчит.
Я написал методику, позволяющую делать подобные вещи в java - аналогично старой C-подобной идиоме чтения битовых полей. Обратите внимание, что это только начало, но его можно расширить.
Если бы вы использовали Preon , то все, что вам нужно было бы сделать, это следующее:
public class Header {
@BoundNumber int version;
@BoundNumber byte type;
@BoundNumber int beginOfData;
@BoundString(size="15") String id;
}
Получив это, вы создаете кодек, используя одну строку:
Codec<Header> codec = Codecs.create(Header.class);
И вы используете кодек например:
Header header = Codecs.decode(codec, file);
Я бы создал объект, который обертывает представление данных ByteBuffer и предоставляет геттеры для чтения непосредственно из буфера. Таким образом вы избегаете копирования данных из буфера в примитивные типы. Кроме того, вы можете использовать MappedByteBuffer для получения байтового буфера. Если ваши двоичные данные сложны, вы можете смоделировать их с помощью классов и дать каждому классу нарезанную версию вашего буфера.
class SomeHeader {
private final ByteBuffer buf;
SomeHeader( ByteBuffer fileBuffer){
// you may need to set limits accordingly before
// fileBuffer.limit(...)
this.buf = fileBuffer.slice();
// you may need to skip the sliced region
// fileBuffer.position(endPos)
}
public short getVersion(){
return buf.getShort(POSITION_OF_VERSION_IN_BUFFER);
}
}
Также полезны методы для чтения значений без знака из байтовых буферов.
HTH
Вы могли использовать класс DataInputStream следующим образом:
DataInputStream in = new DataInputStream(new BufferedInputStream(
new FileInputStream("filename")));
int x = in.readInt();
double y = in.readDouble();
etc.
, Как только Вы получаете эти значения, которые можно сделать с ними как Вам нравится. Ищите java.io. Класс DataInputStream в API для большего количества информации
Я, возможно, неправильно понял Вас, но это кажется мне, Вы создаете структуры в оперативной памяти, Вы надеетесь, будет байт на байт точное представление того, что Вы хотите считать из жесткого диска, затем скопируйте целый материал на память и управляйте отсюда?
, Если это действительно имеет место, Вы играете в очень опасную игру. По крайней мере, в C, стандарт не осуществляет вещи как дополнение или выравнивание членов структуры. Не говоря уже о вещах как большой/маленький порядок байтов или биты четности... Таким образом, даже если Ваш код, оказывается, работает, это очень непортативно и опасно - Вы зависите от создателя компилятора, не передумавшего на будущих версиях.
Лучше для создания автомата обоим проверяют считанную структуру (байт на байт) от HD допустимо, и заполнение структуры в оперативной памяти, если это действительно в порядке. Можно освободить некоторые миллисекунды (не так, поскольку это может казаться для современных Ose, делают большое кэширование чтения с диска), хотя Вы получаете независимость компилятора и платформа. Плюс, Ваш код будет легко портирован на другой язык.
Постредактирование: В некотором роде я сочувствую Вам. В хорошие-ol' дни DOS/Win3.11 я когда-то создал программу C для чтения файлов BMP. И используемый точно та же техника. Все было хорошо, пока я не пытался скомпилировать его для Windows - ой!! Интервал был теперь 32 бита длиной, а не 16! То, когда я пытался скомпилировать на Linux, обнаружило, что gcc имел совсем другие правила для выделения битовых полей, чем Microsoft C (6.0!). Я должен был обратиться к макро-приемам для создания его портативным...
Я предполагаю, что FileInputStream позволяет Вам читать в байтах. Так, открывая файл с FileInputStream и чтением в sizeof (заголовок). Я предполагаю, что заголовок имеет фиксированный формат и размер. Я не вижу, что упомянул в первом сообщении, но предположив, что это имеет место, поскольку это стало бы намного более сложным, если заголовок имеет дополнительный args и различные размеры.
, Как только у Вас есть информация, может быть класс заголовка, в котором Вы присваиваете содержание буфера, который Вы уже считали. И затем проанализируйте записи подобным способом.
Поскольку другие люди упоминают DataInputStream, и Буферы являются, вероятно, API низкого уровня, который Вы после для контакта с двоичными данными в Java.
Однако Вы, вероятно, хотите что-то как Конструкция (страница Wiki имеет хорошие примеры также: http://en.wikipedia.org/wiki/Construct_ (python_library) , но для Java.
я не знаю ни о ком (версии Java) от руки, но проявления, что подход (декларативно определение структуры в коде), вероятно, был бы правильным способом пойти. С подходящим быстрый интерфейс в Java это, вероятно, было бы весьма схоже с DSL.
РЕДАКТИРОВАНИЕ: бит гугления показывает это:
http://javolution.org/api/javolution/io/Struct.html
, Который мог бы быть видом вещи, которую Вы ищете. Я понятия не имею, работает ли это или хорошо работает, но это похоже на разумное место для запуска.
Вот ссылка для чтения байта с помощью ByteBuffer (NIO Java)
В прошлом я использовал DataInputStream для чтения данных произвольных типов в указанном порядке. Это не позволит Вам легко объяснять проблемы с обратным порядком байтов/с прямым порядком байтов.
С 1,4 java.nio. Буферная семья могла бы быть способом пойти, но кажется, что Ваш код мог бы на самом деле быть более сложным. Эти классы действительно имеют поддержку обработки проблем порядка байтов.
Только что я нашел эта статья об использовании отражения и парсинге считывать двоичные данные. В этом случае автор использует отражение для чтения двоичного файла Java .class файлы. Но если Вы считываете данные в файл класса, это может иметь некоторую справку.