Piszę prosty filtr w Javie...
... i dochodzę do wniosku, że zupełnie ona nie nadaję się do tego. Naturalny byłby taki model:
- Klient wywołuje read()
- Klasa sprawdza, czy w buforze jest odpowiednia ilość znaków, jeśli tak to zwraca je. Jeśli nie patrz dalej.
- Klasa 'budzi' parser
- Parser czyta strumień i zwraca token
- Klasa pracuje nad tokenem
- Klasa pisze do bufora
- 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
- Wątek kładzie poszczególne tokeny na listę
- Wątek czyta listę, przetwarza i zapisuje do PipedWriter
- 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?