Programowanie (Moje Projekty), Programowanie (PHP, Java...)

Piszę prosty filtr w Javie...

07 lipca, 2006 o 22:00:47 Dodaj komentarz Poziom: 0 Permalink

... i dochodzę do wniosku, że zupełnie ona nie nadaję się do tego. Naturalny byłby taki model:

  1. Klient wywołuje read()
  2. Klasa sprawdza, czy w buforze jest odpowiednia ilość znaków, jeśli tak to zwraca je. Jeśli nie patrz dalej.
  3. Klasa 'budzi' parser
  4. Parser czyta strumień i zwraca token
  5. Klasa pracuje nad tokenem
  6. Klasa pisze do bufora
  7. Wracamy do ptk. 2

Właściwie to do pisania filtrów wystarczyłaby napisanie ptk. 5. Tymczasem muszę (chyba, że ktoś mi poda, gdzie taką klase mogę znaleźć) prawie wszystkie punkty napisać od początku.

Inne rozwiązanie to z urzyciem synchronizowanej listy. Napisanie tego nie zajmuje dużo czasu i jest w durzej mierze wspomagane JavaCC

  1. Wątek kładzie poszczególne tokeny na listę
  2. Wątek czyta listę, przetwarza i zapisuje do PipedWriter
  3. Wątek czyta z PipedReader (wątek klienta)

Niestety tutaj mamy ten problem, że mamy aż 2 wątki 'nadmiarowe' i rurkę. W dodatku te 2 wątki nie wiem jak zakończyć (w końcu parser przejmuje kontrolę nad parserem a nie ma metody isClosed()).

W Javie wcześniejszej niż 1.5(Program ze swej natury musi być kompatybilny conajmniej z Javą 1.2) nie ma StringBuilder więc zaimplementowanie pierwszego rozwiązania:

  • Wymagałoby implementacji tego
  • Korzystałaby z bufora stałej długości (co jeśli jakiś tekst jest większy? a co jeśli dużo mniejszy?)
  • Korzystałaby ze String. Ze względu na naturę Javy mogłoby być to dość kosztowna operacja...

Czy w tym momencie jestem zmuszony stworzyć odrębny pakiet utils?