Ich arbeite gerade an einem kleinen Programm, das Text komprimiert, indem wiederholte Wörter/Phrasen durch einen Verweis auf das nächste Vorkommen ersetzt werden - also eine Zeichenkette in eine kürzere Zeichenkette ohne Metadaten oder Arrays oder irgendwelche Techniken, die bei der echten Komprimierung verwendet werden. Meine Referenzen sind als Paare von Zeichen in einem gewissen Sinn wie folgt gespeichert:Können einige ASCII-Zeichen jeden String/Array/Stream in Java unterbrechen/beenden?
(char)7 + (char)(length << 4 + offset)
wo (char)7
zum Signalisieren eines komprimierten Referenz nur ein willkürlicher ausgewählt char ist. Sowohl die Länge als auch der Versatz sind vollständige Werte byte
Variablen, die sich auf die Anzahl der Wörter beziehen, die ersetzt werden, und den Offset bis zum nächsten Auftreten. (I'ts nicht relevant für die Frage, aber ich bin sie als unsigned Bytes durch manuelle unsigned < Behandlung -> unterzeichnet Konvertierung.)
//Example compression would result like this:
String input = "compression and compression";
String output = (char)7 + (char)18 + " and compression"
//(char)18 - binary 0001 0010 would be saying 1 word repeat, from 2 words ahead.
TL; DR:, ich habe Angst, dass Es kann spezielle Situationen geben, in denen mein benutzerdefiniertes Zeichen als spezielles ASCII-Zeichen interpretiert werden kann. Ich bin mir bewusst, dass Strings in Java \0
Zeichen ignoriert (Due to this question). Aber gibt es andere Java-Methoden/Klassen, die Probleme verursachen könnten? Angenommen, ich würde die komprimierte Zeichenfolge mit Dingen wie Streams, Puffern, Lesegeräten, Char-Arrays usw. senden/konvertieren?
Meinst du, dass ich unbedingt vermeiden sollte, meine komprimierte Zeichenfolge in Bytes zu konvertieren? Wäre es besser, wenn ich die Ausgabe nie zu einer Zeichenkette machen würde und stattdessen direkt ein Byte [] für die komprimierten Daten mache? – Chexxor
Ja, auf diese Weise können Sie kurze Offsets (ein Byte), lange Offsets (zwei Bytes) und so weiter haben. Auch die Verwendung von Indizes im Array bytes. Sollte schöner aussehen. –