Я выполняю некоторую работу, связанную с шифрованием файлов. Я могу зашифровать / расшифровать файлы, но столкнулся с серьезной проблемой производительности. Когда я просто читаю / записываю видеофайл размером 700 МБ, мой код работает со скоростью около 27-28 МБ / с. Но когда я выполняю шифрование (в настоящее время я использую PBEWithMD5AndDES, который я изменю позже), код показывает скорость 9 МБ / с. Посоветуйте, пожалуйста, что я могу улучшить.
Фрагмент кода:
int c = 0, BUF_SIZE = 8192;
byte[] b = new byte[BUF_SIZE];
FileInputStream fis;
DataInputStream dis;
FileOutputStream fos;
DataOutputStream dos;
CipherOutputStream cos;
try {
// Create PBE parameter set
pbeParamSpec = new PBEParameterSpec(salt, iterationCount);
// Create PBE Cipher
Cipher pbeCipher = Cipher.getInstance(algorithm);
// get key
key = generateKeyFromPassword(password);
// Initialize PBE Cipher with key and parameters
pbeCipher.init(Cipher.ENCRYPT_MODE, key, pbeParamSpec);
fis = new FileInputStream(inFile);
dis = new DataInputStream(fis);
fos = new FileOutputStream(outFile);
dos = new DataOutputStream(fos);
cos = new CipherOutputStream(fos, pbeCipher);
while ((c = dis.read(b)) > 0) {
cos.write(b);
//dos.write(b);
}
fis.close();
dis.close();
//dos.close();
cos.close();
} catch (Exception e) {
e.printStackTrace();
}
Статистика без шифрования:
Скорость составляет около 27,97 МБ / с
Точное время = 25,02 секунды
Размер файла = 700 МБ
Статистика с шифрованием:
Скорость около 9,69 МБ / с
Точное время = 72,171 сек
Размер файла = 700 МБ