Я пытаюсь написать текстовый файл с моим сервлетом и отправить его в мое приложение на рабочем столе.Настольное приложение сохраняет файл на локальном диске.Нет проблем с загрузкой больших двоичных файлов, но TXT-файлы, которые являются маленькими, пропускают последние символы.
Например, сервлет отправляет TXT-файл, длина которого составляет 523 КБ, но когда я сохраняю его в настольном приложении, длина файла496KB?
Вот код сервлета:
final int BUFFER_SIZE = 4096;
FileInputStream in = new FileInputStream(file);
OutputStream out = response.getOutputStream();
byte buffer[] = new byte[BUFFER_SIZE];
for (int nread = 0; (nread = in.read(buffer)) != -1;) {
out.write(buffer, 0, nread);
}
out.flush();
out.close();
in.close();
А вот код настольного приложения (я использую HttpClient 4):
response = httpclient.execute(httppost);
resEntity = response.getEntity();
InputStream in = resEntity.getContent();
in = new CipherInputStream(in, decipher);//maybe the aes block missing here...
FileOutputStream out= new FileOutputStream(path);
byte[] buffer = new byte[4096];
int numRead = 0;
while ((count = in.read(buffer)) != -1) {
out.write(buffer, 0, count);
}
out.flush();
out.close();
И расшифровщик определентак же, как и для шифрования ...:
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128);
key = kgen.generateKey();
byte[] ivar = new byte[]
{
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
};
AlgorithmParameterSpec params = new IvParameterSpec(ivar );
dcipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
dcipher.init(Cipher.DECRYPT_MODE, key, params );
Пожалуйста, помогите мне понять, почему я теряю некоторые символы текстовых файлов?