Java 下载的txt文件变小

Java 下载的txt文件变小,java,servlets,file-io,download,encryption,Java,Servlets,File Io,Download,Encryption,我正在尝试用servlet编写一个txt文件,并将其发送到我的桌面应用程序。桌面应用程序将文件保存在本地磁盘上。下载大的二进制文件没有问题,但是txt文件会丢失小的最终字符 例如,servlet发送长度为523KB的txt文件,但当我将其保存在桌面应用程序上时,文件长度为496KB 以下是servlet代码: final int BUFFER_SIZE = 4096; FileInputStream in = new FileInputStream(file); OutputStream out

我正在尝试用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):

破译器的定义与加密相同…:

  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示例代码直接将字节写入输出流,但桌面应用程序示例代码正在解密它读取的内容。如果桌面正在解密未加密的数据,结果可能不可预测。

行尾字符的差异(\n vs\r\n)?你真的比较过这些文件,看看有什么不同吗?嗯,文件在一个字之内就缩小了。原文:布朗先生能每三个月出国一次,但他不能让他的狗下载:布朗先生能每三个月出国一次,正如你在一个字之内就能看到的:(在两侧显示
in
out
的声明不,数据之前使用相同的密钥加密。除txt格式外,所有文件都没有问题:(我没有检查pdf,但txt是一个真正的badluckI猜测它是一些AES解密块丢失,因为所有txt文件丢失了15-16个字符。它是128位或其他,根据代码kgen.init(128);…我不知道如何修复它。请帮助。)
  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 );