Доброго времени суток форумчанам.
Как тут не однократно говорили - стандартными средствами - тормозит, а библиотеку сделать не выйдет.
сейчас использую вот такую функцию для чтения нужной строки:
function textread(a:integer; data:string): string;
var
loopIndex:integer;
begin
text:=openResource('/'+data);
for loopIndex := 0 to a do
begin
textread:=readLine(text);
end;
closeResource(text);
end;
конечно же каждый раз перебирать весь файл - бред собачий. Но максимально что получилось вытянуть - использовать файлы с небольшим количеством строк и при загрузке загонять в массив строк, однако чтение ~ 70 строчного файла на SE500 занимает ~6-10секунд! Так ладно - загрузили и забыли, но при переключении на другой файл во время работы приложения это недопустимо.
Вот вы говорите что нельзя такую либу написать. Но меня тогда гложет любопытство, каким образом работают java книги? (я буду ставить в пример Tequila cat book reader) Мощная читалка и держит файлы ЛЮБОГО размера (свыше 6000 строк точно), использует графические шрифты, моментально грузит файл (до 5ти сек, а то и меньше на SE500) и никаких тормозов и подгрузок. абсолютно никаких. во время использования нет.
Я взял скомпилированный мидлет и попытался распаковать самый "выпяченный" класс (BookReaderMidlet.class) - результат довольно интересен (см вложение). Если даже чтение определённых строк не реализуемо, то "быстрое" чтение реализуемо вполне. Вопрос как. Прошу поделиться вашими соображениями на этот счёт и надеюсь на помощь.
ADD.
Похоже используется вот этот метод, но на первый взгляд мало чем отличается. тот же перебор.
import java.io.*;
import java.awt.*;
import java.applet.*;
public class Read extends Applet {
TextArea ta = new TextArea();
public void init() {
setLayout(new BorderLayout());
add(ta, BorderLayout.CENTER);
try {
InputStream in =
getClass().getResourceAsStream("read.txt");
InputStreamReader isr =
new InputStreamReader(in);
BufferedReader br =
new BufferedReader(isr);
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
String line;
while ((line = br.readLine()) != null) {
pw.println(line);
}
ta.setText(sw.toString());
} catch (IOException io) {
ta.setText("Ooops");
}
}
}