Programmierpraktikum 2 (WS98/99)	Übung #6	Abgabe: Donnerstag,  3.12.1998	

Übung 6 [24]: UUENCODE / UUDECODE - Filter

Uuencode kodiert eine Datei in einem 7-Bit Format wie folgt:
Dateien, die mit uuencode kodiert wurden, enthalten eine Startzeile, mehrere Datenzeilen und eine Stopzeile. Zeilen vor der Startzeile und nach der Stopzeile wurden so wie sie waren übernommen.
Die Startzeile beginnt mit dem Schlüsselwort begin , gefolgt von (unix-spezifischen) Dateirechten im Oktalmodus und dem Dateinamen der zu kodierenden Datei, getrennt durch je ein Blank. Ignorieren Sie bei uudecode diese Dateirechte und wählen Sie bei uuencode prinzipiell "777".
Die kodierten Datenzeilen sind maximal 62 Zeichen lang (inklusive dem newline-Zeichen ('\n') am Ende); sie enthalten einen Zeichenzähler, die kodierten Zeichen und das newline-Zeichen am Ende. Das Zeichenzähler-Zeichen ist ein einziges Zeichen und repräsentiert die Anzahl der nicht kodierten Bytes, die in der betreffenden Datenzeile kodiert sind. Diese Zahl liegt immer zwischen 0 und 45.
Gruppen von drei Bytes (der zu kodierenden Datei) werden als 4 Zeichen (in der kodierten Datei) gespeichert, jeweils 6 Bits pro Zeichen. Zu jedem Zeichen wird das Leerzeichen (oktal 40) hinzuaddiert. Dadurch wird der Wertebereich der kodierten Zeichen von [0..65] auf [32..97] verschoben. Damit besteht eine Datenzeile aus:
•	dem Zeichenzähler-Zeichen
•	(45 Zeichen aus der Quelle/3)*4 = 60 kodierten Zeichen
•	dem Newline-Zeichen.
Die letzte kodierte Datenzeile kann kürzer sein als 62 Zeichen. Auch muß die Größe der Datei kein Vielfaches von 3 sein, was an Hand des Zählers der letzten Zeile festgestellt werden kann. Damit in diesem Fall die Anzahl der kodierten Zeichen ein Vielfaches von 4 wird, werden bei uuencode bei Bedarf beliebige Zeichen (z.B. der Inhalt der vorletzten Zeile an dieser Stelle oder irgendwas) hinzugefügt. Bei uudecode erkennt man dann am Zeichenzähler, wie viele der dekodierten Bytes der letzten kodierten Datenzeile relevant sind. 
Die letzte Datenzeile enthält eine Zeile mit Zeichenzähler 0 (also nur 1 ASCII-Zeichen). Die Stopzeile besteht aus dem Schlüsselwort end.

Aufgabe:
Schreiben Sie eine uuencode- und eine uudecode-Filterklasse.

Implementierung:
Mit uudecode werden Dateien dekodiert, also kodierte Dateien gelesen. Mit uuencode werden Daten in kodierter Form ausgegeben. Dabei handelt es sich um ASCII-Zeichen, also Bytes. Daher ist uudecode ein InputStreamFilter und uuencode ein OutputStreamFilter. 
Die sinnvoll zu bearbeitende Zeichenmenge ist eine Zeile, daher wird gepuffert!
Die Methoden, die die Filterung durchführen, sind die entsprechenden Methoden der zugrundeliegenden Klasse.