При чтении из очень большого зашифрованного файла на Java я использую следующий код:
FileInputStream in = new FileInputStream("file.txt");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(saveLocation), "utf-8"));
int read;
byte buffer[] = new byte[16384];
byte getData[] = new byte[16384];
while((read = in.read(buffer)) != -1)
{
baos.write(buffer, 0, read);
Cipher cipher = Cipher.getInstance(symCipher);
IvParameterSpec ivParameterSpec = new IvParameterSpec(initVecBytes);
cipher.init(Cipher.DECRYPT_MODE, originalKey, ivParameterSpec);
byte[] original = cipher.doFinal(baos.toByteArray());
String s = new String(original);
writer.append(s);
baos.reset();
}
writer.close();
Поскольку файл очень большой (слишком большой для меня, чтобы загрузить его в память за один раз), я читаю его в небольшой буфер, затем шифрую небольшие байты данных и, наконец, записываю их в файл.
Однако, когда я это делаю, некоторые данные выглядят поврежденными:
</AddressLine><_��SR����_�hEE</AddressLine></AddressLines><Postcode>
Когда я использую файл меньшего размера, размер которого не 16 КБ, он работает нормально, кажется, я получаю только небольшое количество поврежденных данных в начале чтения нового массива, затем снова все в порядке, пока не будет прочитан следующий массив , и так далее.
У кого-нибудь есть идеи, почему это не работает должным образом?