Question

Je dois vérifier la signature sur un fichier pouvant aller jusqu'à 2 Go, et je souhaite le faire de manière à optimiser l'efficacité de la mémoire. Pour diverses raisons, le fichier sera déjà chargé complètement dans la mémoire et est accessible à l'aide d'un InputStream par l'application. Je souhaite vérifier la signature à l'aide de l'interface de flux, mais la méthode JCA Signature de la classe update n'accepte que les codes octet [] et les classes associées.

Comment puis-je le faire efficacement? Je ne veux pas charger la bête dans un second tableau d'octets, sinon nous verrons une utilisation sérieuse de la mémoire, mais l'interface ne semble pas la prendre en charge autrement.

Mettre à jour

Si cela compte, l'algorithme de signature est SHA-1

Était-ce utile?

La solution

Pourquoi ne pas simplement lire dans le flux d'entrée un bloc (4096 octets ou une taille convenable) à la fois, appelez update () pour chaque bloc.

Autres conseils

Créez un tableau d'octets faisant office de tampon et lisez le tampon à la fois depuis InputStream, en appelant update () à la signature à chaque fois. À condition que la taille de la mémoire tampon soit raisonnable, le temps CPU nécessaire au transfert des données d'un processus à un autre (je suppose que c'est ce que vous faites?) Sera probablement négligeable par rapport au temps de calcul. Dans le cas de la lecture sur disque, le point de coupure pour un rendement négligeable sur l'utilisation du processeur semble être une taille de mémoire tampon d'environ 8 Ko, et je suppose que cela s'appliquera plus ou moins à votre cas également. (Si cela vous intéresse, reportez-vous à la page que j’ai réunie à la tailles de mémoire tampon InputStream . .)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top