Попробовал опять начать программировать под J2ME. И столкнулся с прямо таки непреодолимыми проблемами. Тут и нехватка стандартных классов, и кривость виртуальной машины, и глюки эмулятора от SonyEricsson.
1. Построчное чтение файла
Каково же было моё удивление, когда я обнаружил, что ни один из стандартных классов ввода/вывода не позволяет построчно считывать и записывать файлы. Мне, например, удобно хранить списки карт/ресурсов/монстров в текстовом файле построчно. Что же делать? Помнится, пару лет назад писал функцию, считывающую текстовик целиком и делящую его на строки. На выходе получался массив String-ов. Да, знаю - я был извращенцем.
Вот новый код:
import java.io.*;
public class InputStreamTextReader extends InputStreamReader
{
protected InputStream is;
public InputStreamTextReader(InputStream is_)
{
super(is_); is = is_;
}
public InputStreamTextReader(InputStream is_, String enc_)
throws UnsupportedEncodingException
{
super(is_, enc_); is = is_;
}
public String readLine()
throws IOException
{
String str = "";
while (true)
{
int ch = is.read();
switch (ch)
{
case -1: return ((str.length() > 0) ? str : null);
case 13: return str;
case 10: if (str.length() == 0) continue;
}
str += String.valueOf((char)ch);
}
}
}
Подсветка синтаксиса выполнена при помощи Notepad++
Кстати говоря, этот перл в InputStreamReader меня вообще убил:
private Reader in;
Почему он не protected? Как так можно? Что уже говорить о том что ни один и стандартных классов не работает с методами mark/reset. Чтобы вернуться в начало файла - нужно переоткрыть поток, а значит породить вопрос к пользователю. Или написать свой класс, буферизующий поток. Это бессмысленно! Как сделать нормальное чтение "больших" текстовиков?
2. Утечки памяти в элементах стандартного GUI
Вот мой вопрос на Google ВиО по этому поводу. Там я исчерпывающе описал в чём я вижу проблему. Может это конечно эмулятор глючит, но сомневаюсь.
Попробовал Lightweight User Interface Toolkit 1.2 от Sun(хотя, теперь уже трудно сказать чья она) - те же яйца, только в профиль. Он конечно по моднее будет: лэйауты появлись и прочие прибамбасы . . . А с памятью всё также не аккуратен. Эх, жаль Qt для j2me не сделали. Кстати, Qt Jambi будет поддерживаться компанией Nokia лишь до мая 2010.
1 комментарий:
str += String.valueOf((char)ch) крайне неэффективная инструкция.
Вместо String внутри метода readLine() лучше было бы использовать StringBuffer.append() или char[].
Отправить комментарий