Bonjour,
J'utilisais avant un bufferedReader pour lire mes fichier ligne par ligne et faire un traitement specifique à ces lignes.
Ayant découvert depuis peu le package nio, j'ai voulu tester s'il peut m'aider à accoîtres les performances de mon application.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 int bufferSize = 100000; //100k int sz = (int) channel.size(); long result = sz / bufferSize; long reste = sz % bufferSize; //bb = ByteBuffer.allocateDirect(bufferSize); //nuit aux perfs bb = ByteBuffer.allocate(bufferSize); //better perfs cb = CharBuffer.allocate(bufferSize); for (int i = 0; i < result; i++) { //1ere apparoche int read = channel.read(bb); bb.clear(); cb.clear(); cb = decoder.decode(bb); lines = lines + grep(f, cb); bb.flip(); cb.flip(); }
voici le code de la fonction grep
le probleme est que des lignes ne sont pas corrects. Ces lignes sont la première ligne au début de chaque itération à partir de la deuxiéme. J'ai remarqué qu'à la fin du charbuffer, la dernière ligne n'est pas complète mais je n'ai pas trouvé de solution pour corriger le probleme.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 private static Pattern linePattern = Pattern.compile(".*\r?\n"); private static int grep(File f, CharBuffer cb) { Matcher lm = linePattern.matcher(cb); // Line matcher int lines = 0; while (lm.find()) { lines++; CharSequence cs = lm.group(); // The current line System.out.print(cs); } return lines; }
Partager