我想加密一些数据,稍后再解密。当我这样做时,文件末尾会有奇怪的字符。
当它是一个小文件时,我试图修复缓冲区大小。但是当文件更大时,我假设缓冲区中有奇怪的值,这些值只是放入文件中,这些值没有被刷新或磁盘上的其他地方。 但是我不知道如何处理我不知道确切大小的非常大的文件。
在不超过我正在读/写的确切文件大小的情况下,我该怎么做才能拥有一个更动态的缓冲区?
private static void writeBytes(FileInputStream fis, ByteArrayOutputStream baos, FileOutputStream fos, long inSize)
throws IOException {
InputStreamReader isr = new InputStreamReader(fis);
int read = 0;
int bufsize = inSize < 1024 ? Math.toIntExact(inSize) : 1024;
byte[] buf = new byte[bufsize];
while ((read = fis.read(buf)) > 0) {
byte[] ret = buf;
//I think i should make it here more dynamica because i only need
//the new read data
rounds++;
ret = startEncryption(ret, baos);
fos.write(ret);
}
fos.flush();
fos.close();
fis.close();
}
INPUTFILE.txt
Hello StackOverflow
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
Some more Values exceeding 1024 Bytes
Some more Values exceeding 1024 Bytes
Some more Values exceeding 1024 Bytes
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
Bye StackOverflow
先加密再解密
输出文件.txt
Hello StackOverflow
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
Some more Values exceeding 1024 Bytes
Some more Values exceeding 1024 Bytes
Some more Values exceeding 1024 Bytes
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
Bye StackOverflowAZØgZ—»:ÔU
ßøëdKBqDûî=üõU,Ôžð~S¤‘H—[„FUùP!S?ª7+Xnf ´ŸŸ‰Q¡yB3ÑJ€†€Þt2
:ÂSø¿#¡™,Íô1L䕲{nÿb>òVc•<ùhÇéJŒìÄ퀕¿šãe5³X”ââªüÄUÐNØÛzc!oläÃÝ“ª9iÛÂÐ êÞ¡Þ)òSþ-Ðét½ |ˆ&š'wÌAr9ö[ì·K$rI2¸ˆÕ5õ[1X¿°¹W¡'Ù>ñg–…$}‘˜mnòÛò¢zÔŠÍBØÊH¸[®âù l+½&ˆ¸´üô°Žùdz資oÆ=ó×.ôNÛºi{z·ˆcø¯þÁ›<n?»Ñµ¼¼üÌ Y÷ÎCÚAbýK¡ƒÿÈù‡)´ž|/Åÿˆ(ë¤_ï|ÛL=¹Ã7¾JXº¿ÍoIŸY¬ôÍÙQÀÒ¸~ò!aËæÆ×"(›Ÿ¥¹°‚_ ‹Qj‚†a‰3)‰{Ãç|e
有一些奇怪的值。
最佳答案
您总是在处理整个缓冲区,即使最后一次读取很可能不会完全填满缓冲区。您需要使用 read
变量来了解读取了多少字节,然后处理 byte[]
直到达到该限制。
关于java - 当我使用 AES 加密或解密文件时,文件末尾有奇怪的字符,这可能是缓冲区问题还是 AES 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58098050/