Java 解密后缺少几个字符

Java 解密后缺少几个字符,java,encryption,Java,Encryption,这是我的原始xml: <?xml version="1.0" encoding="UTF-8"?> <table> <row> <id>12</id> <name>Mickey Mouse</name> </row> </table> 请帮忙。谢谢。尝试关闭(或至少刷新)您的CipherOutputStream(cos),因为可能有一些字节

这是我的原始xml:

<?xml version="1.0" encoding="UTF-8"?>
<table>
    <row>
        <id>12</id>
        <name>Mickey Mouse</name>
    </row>
</table>
请帮忙。谢谢。

尝试关闭(或至少刷新)您的
CipherOutputStream
cos
),因为可能有一些字节从未写入原始加密文件。

发现问题。做

        cos.close();
行前:

        fos.close();

至少,这把它固定在我的箱子上了

写入加密输出后,调用

cos.close();
而不是

fos.close();

关闭cos对象也会关闭基础fos对象。

同意JASON的观点。您必须关闭密码流而不是文件。即使您可以显式地关闭这两个流,但请确保先关闭密码流,然后再关闭文件流。只有冲洗没有帮助。至少它对我不起作用。:)

我真的不得不盯着它看,看有哪些角色不见了。它似乎是结束标记中的“table”。不需要table标记,它总是最后几个字符:(谢谢!没想到io流的关闭顺序会影响结果。故事的寓意是:始终关闭输入/输出流的外层。在关闭fos cos.flush();fos.flush();fos.close();cos.close()之前,我试图刷新它们。);仍然不起作用。刷新是不够的,因为CipherOutputStream需要知道在写入最后一个块之前将不再有数据。
cos.close();
fos.close();