IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

lire un ligne avec nio


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Inscrit en
    Septembre 2004
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 108
    Par défaut lire un ligne avec nio
    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.

  2. #2
    Membre éprouvé

    Inscrit en
    Septembre 2004
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 108
    Par défaut
    Est ce que je peux récupérer le dernier fragment de la ligne dans le charbuffer
    et l'ajouter au suivant?

Discussions similaires

  1. Lire les lignes d'un fichier avec csh
    Par nicolas581 dans le forum Linux
    Réponses: 4
    Dernier message: 24/03/2010, 17h38
  2. Comment lire des lignes avec un BinaryReader ?
    Par olibara dans le forum C#
    Réponses: 7
    Dernier message: 07/04/2008, 14h57
  3. Lire une ligne de caractères et de doubles avec sscanf
    Par colinou dans le forum Débuter
    Réponses: 4
    Dernier message: 16/03/2008, 21h46
  4. Lire un fichier ligne par ligne avec Awk
    Par Krispy dans le forum Linux
    Réponses: 8
    Dernier message: 07/09/2006, 16h14
  5. lire plusieurs lignes avec fgetc
    Par Mousk dans le forum C
    Réponses: 7
    Dernier message: 25/03/2006, 19h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo