Показать сообщение отдельно
Старый 28.11.2008, 04:02   #12
Shara
AnyKey`щик
 
Регистрация: 27.11.2008
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Чтение произвольной строки из ресурса

Доброго времени суток форумчанам.
Как тут не однократно говорили - стандартными средствами - тормозит, а библиотеку сделать не выйдет.

сейчас использую вот такую функцию для чтения нужной строки:
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");
    }
  }
}
Вложения
Тип файла: txt bck.txt (10.8 Кб, 1026 просмотров)

Последний раз редактировалось Shara, 28.11.2008 в 04:19. Причина: добавил листинг
(Offline)
 
Ответить с цитированием