Strings speichern

psycotis

Grünschnabel
Hallo,

ich bin im Moment dabei einen Ftp Clienten zu schreiben. Die Antworten vom Ftp Server haben am Anfang ja immer eine Erkennungsnummer. Jetzt zu meiner Frage: Was ist eurer Meinung nach die geeignete Struktur um die Nummern zur Abfrage zu speichern, da ich nicht dauernd Equals abfragen mit hard gecodeten Strings in meinem Programm haben will.
Ich hatte ein ein Enum oder an xml gedacht. Bin aber offen gegen gute Vorschläge.

Mfg
 
Was willst du denn zur Nummer speichern bzw. was willst du machen, wenn du weißt, was du gespeichert hast?

Ich würde jetzt erst mal sagen, das die HashMap die richtige Wahl ist...
 
hier ein kleines bsp zum besseren verständniss:
der login erforderts schon das abfragen von 3 nummern
PHP:
output = readControl();
if(output.startsWith("220")) // Server verlangt Anmeldung
	writeControl("USER " + FTP_USER);
output = readControl();
if(output.startsWith("331")) // User akzeptiert, Passwort erforderlich
	writeControl("PASS " + FTP_PASSWORD);
output = readControl();
if(output.startsWith("230")) // Anmeldung erfolgreich
...

Ich brauche eine Struktur die mir die Nummernabfragen mit hard gecodeten Strings erspart.

Eine Hashmap wäre auf jeden Fall viel zu langsam.
 
Hi,

wenn Du es anders machen möchtest könntest Du genauso mit einer RegExp den StatusCode rausparsen in einen int casten und dann kannst du damit in ein Switch-Statment rein gehen, könnte auch etwas schneller sein. Die Codes könntest Du auch in einer HashMap halten die Irgendwann mal geladen wird, wo bei das "hardcoden" in diesem Falle nicht sehr wild sein dürfte, da sich das FTP-Protokoll bis Übermorgen mit hoher warscheinlichkeit nicht ändern wird :-)

hmf
 
Ich weiß zwar nicht, was für eine Hochgeschwindigkeits-FTP-Anwendung du machen möchtest, aber keine vorgestellte Variante dürfte für dich zu (menschlich) merkbaren Einbußen führen - zudem ja auch immer eine Interaktion mit dem Benutzer notwendig ist.

Davon abgesehen ist dein String-Vergleich in jedem Fall schneller als Reguläre Ausdrücke.
Und wenn dir die HashMap zu "langsam" ist, könntest du noch versuchen, dir einen binären Suchbaum aufzubauen - noch umständlicher aber im Endeffekt vielleicht schneller.
 
Also das Problem ist bei der Hashmap nicht wirklich die Geschwindigkeit. Ich will es mal so sagen. Ich stelle mir es eher so vor wie in .net mit den Stringtables. Sprich eine XML die Strings an zentraler Stelle speichert damit ich keine, wie oben schon öfters erwähnt, hart gecodeten Strings im Programm habe sondern nur Konstanten. Da mir das durchparsen einer xml nach dem jeweilig passenden String jedoch als nicht sehr effizient erscheint, dachte ich vllt. hat jemand eine bessere Lösung.
 
Ich weiß nicht genau wie Resources in .net ausschauen.
Allerdings bin ich mir sicher das es in java so etwas ähnliches gibt, das java von c++ und smalltak gelernt hat und .net von Java gelernt (zu mindest C#) hat.

Properties sind einfache files mit name value paires.
zb.:
color.red=#CC0033
color.green=#00CC00
color.blue=#0000FF
...

und dann sagt man
Properties properties = new Properties();
properties.load(new FileInputStream("farben.properties"));
String grün= properties.getProperty("color.green");

Da die Anzahl der FTP return status codes begrenzt ist (39 definierte),
würde ich sagen
abschneiden, casten und switchen.

Alle anderen Methoden sind vielleicht eleganter, brauchen aber mehr programmieraufwand und es ist nicht sicher ob sie auch schneller sind.

Mike
 
Ich weiß nicht genau wie Resources in .net ausschauen.
Allerdings bin ich mir sicher das es in java so etwas ähnliches gibt, das java von c++ und smalltak gelernt hat und .net von Java gelernt (zu mindest C#) hat.

Properties sind einfache files mit name value paires.
zb.:
HTML:
color.red=#CC0033
color.green=#00CC00
color.blue=#0000FF
...

und dann sagt man
HTML:
Properties properties = new Properties();
properties.load(new FileInputStream("farben.properties"));
String grün= properties.getProperty("color.green");
Da die Anzahl der FTP return status codes begrenzt ist (39 definierte),
würde ich sagen
abschneiden, casten und switchen.

Alle anderen Methoden sind vielleicht eleganter, brauchen aber mehr programmieraufwand und es ist nicht sicher ob sie auch schneller sind.

Mike


PS.: Sorry irgend wie hat sich mein Browser beim Ändern verschluckt.
 
Zurück