下载的txt文件变得萎缩

我正在尝试用我的servlet编写一个txt文件并将其发送到我的桌面应用程序。 桌面应用程序将文件保存在本地磁盘上。 下载大二进制文件没有问题,但是txt文件是小错过最终字符。

例如,servlet发送长度为523KB的txt文件,但是当我将它保存在桌面应用程序上时,文件长度是496KB?

这是servlet代码:

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 ); 

请帮我理解为什么我丢失了一些文本文件的字符?

servlet示例代码将字节直接写入输出流,但桌面应用程序示例代码正在解密它所读取的内容。 如果桌面正在解密未加密的数据,则结果可能无法预测。