Hallo!
Dann kann ich mir nur denken, dass da zwischen in.read() und out.write() zuviel Zeit vergeht, die Manipulation also zu lange dauert. Da könnte man eventuell die Puffergröße mal verkleinern:
Das glaube ich nicht. Wie groß sind HTML-Seiten? Was soll da so lange dauern? Und was sol daran schlimm sein? PHP ist siehr deutlich langsamer, aber da habe ich schon erheblich "wildere" Sachen gemacht ;-)
byte[] buf = new byte[1024];
Damit sollte das replaceAll() eventuell schneller werden.
Aber insgesamt langsamer, oder?
Wo ich das jetzt nochmal lese, fällt mir ein rundsätzlicher Fehler in der Idee der Manipulation des Datenstromes auf:
Wer stellt denn sicher, dass die Worte, welche ersetzt werden sollen, wirklich vollständig im Puffer enthalten sind? Es könnte Folgendes auftreten:
Niemand. Das war mir aber bewußt. Ich will duch nur das es funkitoniert ;-)
buf1 = ...blah bluh blub Com
buf2 = puter blah ...Hier wird das Wort Computer nicht ersetzt.
Ich sehe hier 3 Lösungsmöglichkeiten:
1. Ich lese erstmal alles in den Puffer, mache daraus einen String und verwende replace, konvertiere das wieder in bytes und schreibe es weiter.
2. Ich lese und schreibe die Daten nicht byteweise(nur bei content-type html), sondern zeilenweise mit readline als String, und verwende replace auf jede line, und schreibe den veränderten String dann wieder auf "out"
3. Ich schreieb eine replace-Funktion für Byt-Arrays, müsste ich die zu ersetzenden Strings in Bytes umwandeln, und dann den byte nach einer passenden "byte-Sequenz" abuchen, wobei, dann man kann da ja nicht so einfach einen längeren Array einfügen, oder? Nur denke ich wäre das das performanteste.
Ich habe unten mal die aktuele Version mitgepostet, muss man nur speichern, kompiliern und dann im Browser als Proxy localhost auf Port 7788 eintragen, das funktioniert dann auch weitgehend. Der Teil der Daten ersetzt ist auskommentiert.
Ich versuche jetzt aber nochmal "methode 2." ;-)
Denn so wie ich es zulezt gemacht habe bekomme ich mehr oder weniger Buchstabensalat raus.
Grüße
Andreas