Quel est le meilleur encodeur base 64 en plusieurs parties en java?


J'ai testé différents encodeurs base64 mig64, iHarder, sun etc. Il semble que ceux-ci doivent avoir toutes les données doivent être en mémoire pour la conversion.

Si je veux encoder un fichier volumineux (flux) > 1 go de manière multithread, quelle implémentation de codec peut être utilisée sans corrompre le fichier? le codec commons semble avoir le wrapper base64outputstream. d'autres solutions?

Pour être clair, j'ai un fichier de 1 To, et ce fichier doit être codé en base64. Mémoire de machine 2GB RAM, quel est le moyen le plus rapide de le faire en Java?

Author: zudokod, 2011-04-14

1 answers

Je ne sais pas quel encodeur est le plus rapide, vous devrez mesurer chacun pour le déterminer. Cependant, vous pouvez éviter le problème de mémoire et accomplir la concurrence en divisant le fichier en morceaux. Assurez-vous simplement de les diviser sur une limite de 6 octets (car il se transforme uniformément en 8 octets en Base64).

Je recommanderais de choisir une taille de morceau raisonnable et d'utiliser un ExecutorService pour gérer un nombre fixe de threads pour effectuer le traitement. Vous pouvez partager un RandomAccessFile entre eux et écrivez aux endroits appropriés. Vous devrez bien sûr calculer les décalages de bloc de sortie (juste plusieurs par 8 et diviser par 6).

Honnêtement, vous ne réaliserez peut-être pas beaucoup de gain de performance ici avec la concurrence. Il pourrait simplement submerger le disque dur avec un accès aléatoire. Je commencerais par découper le fichier en utilisant un seul thread. Voyez comment rapide qui est premier. Vous pouvez probablement croquer un fichier de 1 Go plus rapidement que vous ne le pensez. Que grosso modo je dirais 1 minute sur le matériel moderne, même écrire sur le même lecteur que vous lisez.

 1
Author: WhiteFang34, 2011-04-14 18:48:55