Aller au contenu

Méthode efficace pour parser rapidement


Recommended Posts

Bonsoir à tous

Je suis à la recherche d'une méthode pour parser un CSV qui pèse un peu moins d'1mo (40000 lignes)

J'utilise un simple bufferedreader pour parser, et il met environ 5 secondes sur mon Milestone 2 mais 20 secondes sur mon Wildfire. J'aimerais grandement réduire ce temps, car le parsing s'execute au lancement de l'application.

Connaissez vous des méthodes intéressantes pour cela ? Ou bien me suggérer un autre moyen pour enregistrer les données de mon fichiers (qui ne changeront jamais) ? J'ai testé en essayant de déclarer mes données directement dans un ArrayList, mais il y a une erreur comme quoi je ne peux pas stocker autant de données.

Le code que j'utilise :

ArrayList<City> cityConfig = new ArrayList<City>();

	InputStream is = context.getResources().openRawResource(R.raw.city);
	BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    try {
    	String line;
    	int i = 0;
        while ((line = reader.readLine()) != null) {
        	if(i > 0){
        		String[] split = line.split(";");
        		String zip = split[0];
        		String s = split[1];
        		zip = zip.substring(1, zip.length() - 1);
        		s = s.substring(1, s.length() - 1);
        		cityConfig.add(new City(zip, s));
        	}
            i++;
        }
    }
    catch (Exception ex) {ex.printStackTrace();}
    finally {
        try {
            is.close();
        }
        catch (Exception e) {e.printStackTrace();}
    }

La lenteur vient-elle de l'utilisation d'un ArrayList ?

Merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

as-tu essayé de les mettre en base de données ?

La différence se ferait sentir ? Je ne connais pas le fonctionnement des bases de données avec Android, peut on utiliser des bases de données embarquées ? (ou faut-il utiliser des outils comme H2 pour Java ?)

Lien vers le commentaire
Partager sur d’autres sites

Android embarque de base un moteur de bdd (sqlite) et tout le nécessaire pour manipuler des bdd.

Dans ton cas, sous réserver que tes données se prêtent à une mise en base, tu y gagnerais:

- le parsing de ton fichier ne serait à faire qu'une seule fois, au premier lancement de l'application

- l'occupation mémoire serait réduite (plus besoin d'un ArrayList pour y stocker toutes tes données)

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...