Ускорение шифрования?

У меня есть этот код для шифрования видеофайлов.

public static void encryptVideos(File fil,File outfile) { try{ FileInputStream fis = new FileInputStream(fil); //File outfile = new File(fil2); int read; if(!outfile.exists()) outfile.createNewFile(); FileOutputStream fos = new FileOutputStream(outfile); FileInputStream encfis = new FileInputStream(outfile); Cipher encipher = Cipher.getInstance("AES"); KeyGenerator kgen = KeyGenerator.getInstance("AES"); //byte key[] = {0x00,0x32,0x22,0x11,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; SecretKey skey = kgen.generateKey(); //Lgo encipher.init(Cipher.ENCRYPT_MODE, skey); CipherInputStream cis = new CipherInputStream(fis, encipher); while((read = cis.read())!=-1) { fos.write(read); fos.flush(); } fos.close(); }catch (Exception e) { // TODO: handle exception } } 

Но файлы, которые я использую, очень большие, и использование этого метода занимает слишком много времени. Как я могу ускорить это?

Ну, это выглядит очень медленно, начиная с:

 while((read = cis.read())!=-1) { fos.write(read); fos.flush(); } 

Вы читаете и пишете один байт за раз и смываете поток . Сделайте это буфером за раз:

 byte[] buffer = new byte[8192]; // Or whatever int bytesRead; while ((bytesRead = cis.read(buffer)) != -1) { fos.write(buffer, 0, bytesRead); } fos.flush(); // Not strictly necessary, but can avoid close() masking issues 

Также обратите внимание, что вы закрываете только fos (не cis или fis ), и вы должны закрыть их все в блоках finally .

Вы можете использовать андроид NDK, чтобы написать эту часть своего приложения с C ++, чтобы добиться значительного повышения производительности. Это похоже на ситуацию, которая выиграет от этого. И уже может быть что-то подобное с NDK.

Вы должны попробовать Facebook Скрывать. Это невероятно быстро!

https://github.com/facebook/conceal

Intereting Posts
Запрос Bluetooth Bluetooth Low Energy не отправлен? SQLiteException: рядом с "": синтаксическая ошибка (код 1) при компиляции Автоматическое возвращение к предыдущему SMS-приложению по умолчанию Как я могу получить имя пакета текущего запуска в android 2.3 и выше? Подтвердите электронную почту внутри EditText Автоматическое воспроизведение видео vimeo в веб-браузере Android Как программно заблокировать / разблокировать экран? Как установить приложение Android на реальном устройстве без публикации и Eclipse? Как я могу использовать режим пакетной камеры для новых телефонов Android в моем приложении? Ajax xhr.getResponseHeader («заголовок пользователя») не работает только для родного браузера Android Как получить событие завершения вызова в Android-приложении Java.net.ServerSocket.accept () не возвращается на Android Одновременное воспроизведение нескольких композиций с помощью MediaPlayer: только один из них действительно играет Как сделать подписанную и запутанную сборку релиза Android из внутреннего затмения? Какой метод вызывается, когда моя активность фокусируется? (После телефонного звонка, задней клавиши, домашнего ключа и т. Д.)