J'ai un cipheroutputTream soutenu par une autre sortie. Après avoir fini d'écrire toutes les données dont j'ai besoin crypté vers le CiPherOutPutStream, j'ai besoin d'apporter des données non chiffrées. P>
La documentation pour CiPherOutPutStream dit que l'appelant Comment puis-je forcer le dernier bloc du crypteur sans fermer le courant? Dois-je écrire ma propre non -ClossiCiPiPhePutStream? P> flush () code> ne forcera pas le bloc final hors du crypteur; Pour cela, je dois appeler
fermer () code>. Mais
fermer () code> ferme également la sortie sous-jacente, que j'ai toujours besoin d'écrire plus à. P>
3 Réponses :
Si vous avez une référence à l'objet code> Cipher code> que le Call chiffre .dOfinal , puis CIPHEROutPutStream code> enveloppe, vous devriez pouvoir faire ce que
ciIPherOutPutStream.close () code> fait: p>
Flush () Code> Le CIPEROutPutStream et continuer. P>
J'ai donc voté cela au départ parce que cela semblait être une bonne idée, mais ce n'est pas le cas. Cipher.DOfinal () renvoie les mêmes octets de plus et plus, donc si vous les insérez manuellement dans le flux de sortie, écrivez plus de choses et fermez éventuellement le cipherOutputStream, ils sont à nouveau insérés.
Si vous n'avez pas de référence au code> Cipher code>, vous pouvez passer un FilterOutPutStream code> à la méthode qui crée le
ciIPherOutPutStream code>. Dans le
FilterOutPutStream code>, remplace la méthode code> Fermer code> de sorte qu'elle ne ferme pas réellement le flux. P>
J'utiliserais cette réponse comme la base de la création de quelque chose comme votre non-clothérouxputtream, mais inspiré par l'exemple de digestoutputtream.on (...) code> Je créerais un
ciphérfinish () code> Méthode après quoi le flux passe simplement des données sur le système d'exploitation sous-jacent.
Peut-être que vous pouvez envelopper votre sortie de sortie avant de mettre dans un cipheroutputTrestream espoir qui aide p> p>