2009-07-06 1 views

Répondre

11

Alors que ce que vous avez n'est pas nécessairement le plus rapide absolu, c'est simple. En fait, je n'utiliserais pas tout à fait cette forme - j'utiliserais quelque chose qui me permet de spécifier un charset, par exemple.

// Why is there no method to give this guaranteed charset 
// without "risk" of exceptions? Grr. 
Charset utf8 = Charset.forName("UTF-8");  
BufferedReader input = new BufferedReader(
          new InputStreamReader(
           new FileInputStream("filename"), 
           utf8)); 

Vous pouvez probablement le faire aller plus vite en utilisant NIO, mais je n'aurais pas jusqu'à ce que j'avais vu un problème réel. Si vous voyez un problème, mais que vous faites d'autres choses avec les données, assurez-vous qu'ils ne sont pas le premier problème: écrire un programme à juste lire le texte du fichier. Ne pas oublier de faire tout ce qu'il faut sur votre boîte pour effacer les caches du système de fichiers entre les courses si ...

+1

Re commentaire: Oui! –

+1

Comment diable pouvez-vous instancier InputStream? –

+0

@jpartogi je pense que cela devrait être FileInputStream ... – jsh

1

Regardez dans java.nio.channels.FileChannel.

0

Avez-vous évalué vos autres options? J'imagine que ne pas utiliser un BufferedReader peut être plus rapide dans certains cas - comme des fichiers extrêmement petits. Je vous recommande de faire au minimum quelques petits tests et de trouver la mise en œuvre la plus rapide qui fonctionne avec vos cas d'utilisation typiques.

0

Dépend de ce que vous voulez lire. Le fichier complet, ou à partir d'un endroit spécifique, avez-vous besoin de pouvoir le parcourir, ou voulez-vous lire le texte complet en une fois?

3

Si c'est/rapide/que vous voulez, gardez les données de caractères sous forme codée (et je ne veux pas dire UTF-16). Bien que les E/S de disque soient généralement lentes (à moins qu'elles ne soient mises en cache), le décodage et la conservation du double des données peuvent également poser problème. Bien que le plus rapide à charger est probablement à travers java.nio.channels.FileChannel.map(MapMode.READ_ONLY, ...), cela a de graves problèmes avec la désallocation.

Des mises en garde habituelles s'appliquent.

0
File file = new File("querySourceFileName"); 
Scanner s = new Scanner(file); 
while (s.hasNext()) { 
    System.out.println(s.nextLine()); 
} 
+0

C'est la manière la plus évidente et la plus simple de lire un fichier. Mais pensez-vous vraiment qu'il peut rivaliser en termes de vitesse? – phineas