Je profilais mon code qui chargeait un fichier binaire. Le temps de chargement était d'environ 15 secondes.Recherche de la taille optimale pour BufferedInputStream en Java
La majorité de mon temps de chargement provenait des méthodes qui chargeaient des données binaires.
J'ai eu le code suivant pour créer mon DataInputStream:
is = new DataInputStream(
new GZIPInputStream(
new FileInputStream("file.bin")));
Et je l'ai changé à ceci:
is = new DataInputStream(
new BufferedInputStream(
new GZIPInputStream(
new FileInputStream("file.bin"))));
Donc, après avoir fait cette petite modification du code de chargement est passé de 15 secondes à 4.
Mais alors j'ai trouvé que BufferedInputStream a deux constructeurs. L'autre constructeur vous permet de définir explicitement la taille de la mémoire tampon.
J'ai deux questions:
- Quelle est la taille choisie BufferedInputStream et est-il idéal? Si non, comment puis-je trouver la taille optimale pour le tampon? Devrais-je écrire un petit morceau de code qui fait une recherche binaire?
- Est-ce la meilleure façon d'utiliser BufferedInputStream? Je l'avais initialement dans le GZIPInputStream mais il y avait un avantage négligeable. Je suppose que ce que le code fait maintenant est chaque fois que le tampon de fichier doit être rempli, le flux d'entrée GZIP passe à travers et décode x octets (où x est la taille du tampon). Serait-il utile d'omettre le GZIPInputStream entièrement? Ce n'est certainement pas nécessaire, mais la taille de mon fichier est considérablement réduite lors de son utilisation.
Je vous suggère d'essayer un tampon de 64 Ko pour le GZIPInputStream lors de la lecture à partir d'un disque. J'utilise 1 Mo, ce qui est probablement plus que nécessaire. ;) –