我正在尝试用我的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 );
请帮助我理解为什么我丢失了一些文本文件?
答案 0 :(得分:1)
servlet示例代码将字节直接写入输出流,但桌面应用程序示例代码正在解密它所读取的内容。如果桌面正在解密未加密的数据,则结果可能无法预测。