À l'origine, j'utilisais les méthodes d'analyse XML de RIM pour analyser un fichier texte de 150 ko, environ 5000 lignes de xml, mais cela prenait environ 2 minutes. :L'analyse d'un fichier texte sur BlackBerry prend une éternité
Titre: Titre du livre
ligne 1
ligne ligne 3
je devrais être capable de lire le fichier en moins de temps qu'il faut pour cligner des yeux, mais il est encore lent . Les livres d'identification sont des vecteurs d'objets et de lignes du livre sont stockés dans un vecteur de chaînes dans l'objet Livre.
class classs = Class.forName("com.Gui.FileLoader");
InputStream is = classs.getResourceAsStream(fileName);
int totalFileSize = IOUtilities.streamToBytes(is).length;
int totalRead = 0;
//Thought that maybe a shared input stream would be faster, in this case it't not.
SharedInputStream sis = SharedInputStream.getSharedInputStream(classs.getResourceAsStream(fileName));
LineReader lr = new LineReader(sis);
String strLine = new String(lr.readLine());
totalRead += strLine.length();
Book book = null;
//Loop over the file until EOF is reached, catch EOF error move on with life after that.
while(1 == 1){
//If Line = Title: then we've got a new book add the old book to our books vector.
if (strLine.startsWith("Title:")){
if (book != null){
books.addElement(book);
}
book = new Book();
book.setTitle(strLine.substring(strLine.indexOf(':') + 1).trim());
strLine = new String(lr.readLine());
totalRead += strLine.length();
continue;
}
int totalComplete = (int) ( ((double) totalRead/(double) totalFileSize) * 100.00);
_observer.processStatusUpdate(totalComplete , book.getTitle());
book.addLine(strLine);
strLine = new String(lr.readLine(), "ascii");
totalRead += strLine.length();
}
pour le shake de performance pourquoi ne pas le faire avec des fonctions traditionnelles seulement? par exemple. sans LineReader. Manipulation manuelle d'une boucle de lecture de caractères. –