Быстрая запись int [] на диск? - PullRequest
2 голосов
/ 02 ноября 2010

В моем приложении для Android у меня есть объект Bitmap и int [].Один алгоритм в моем приложении копирует значения пикселей растрового изображения в int [], а затем изменяет значения в последнем.

Я хочу сохранить содержимое необработанного int [] на диск так быстро, каквозможный.Что такое быстрый и эффективный способ памяти?(т.е. вызов функции .writeInt для каждого элемента int [] был бы очень медленным способом сделать это в Android, поскольку на большинстве устройств JIT отсутствует)

Я обнаружил, что если я создаю байт[] того же размера, что и int [], и скопируйте int [] в байт [], затем я могу использовать один из многих файловых методов ввода-вывода для записи байта [] на диск за один вызов API.Тем не менее, это использует много дополнительной памяти, так как у меня теперь есть две версии int [].

В противном случае, возможно, есть какой-то метод, который будет напрямую записывать значения int растрового изображения в файл?Если это так, я мог бы скопировать int [] обратно в объект Bitmap и использовать его.

Кстати, я не хочу использовать сжатие ".png" и просто хочу сохранить необработанные значения какпоследнее намного быстрее.

Ответы [ 3 ]

1 голос
/ 02 ноября 2010

Я думаю, что вы можете использовать концепцию потока буфера, просто преобразовать часть вашего int [] в byte [] и записать, а затем сделать следующий пакет. Попробуйте протестировать и определить размер буфера, который не слишком требователен к памяти, но достаточно эффективен, я думаю, что несколько КБ будет достаточно.

1 голос
/ 02 ноября 2010

Я думаю, вам придется выделить буфер (byte[]), размер которого максимизирует производительность и все еще использует только разумный объем памяти. Может быть, что-то вроде 8K.

Затем вы перебираете массив в страницах (размер буфера / 4), заполняете буфер и записываете его. Следующая страница может затем использовать тот же буфер. Удостоверьтесь, что вы правильно обрабатываете последнюю страницу, которая может быть наполовину пустой (конечно, с битовой картой, она в любом случае, вероятно, выравнивается по 8КБ).

0 голосов
/ 02 ноября 2010

Самый быстрый способ - создать библиотеку NDK, которая записывает ее с использованием функций C, а затем просто передать массив Int-массив с использованием JNI в подпрограмму C.

-niko

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...