скачанный текстовый файл становится сжатым - PullRequest
0 голосов
/ 31 марта 2011

Я пытаюсь написать текстовый файл с моим сервлетом и отправить его в мое приложение на рабочем столе.Настольное приложение сохраняет файл на локальном диске.Нет проблем с загрузкой больших двоичных файлов, но 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 );

Пожалуйста, помогите мне понять, почему я теряю некоторые символы текстовых файлов?

1 Ответ

1 голос
/ 01 апреля 2011

Пример кода сервлета записывает байты непосредственно в выходной поток, но пример кода настольного приложения расшифровывает прочитанное. Если рабочий стол расшифровывает данные, которые не зашифрованы, результаты могут быть непредсказуемыми.

...