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

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;
	}
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.