Wie zum codieren eines Map<String,String> als Base64-string?
ich wie codieren Sie eine java-map mit strings als eine einzelne base-64-codierte Zeichenfolge. Die codierte Zeichenfolge übermittelt werden, die zu einem remote-Endpunkt und vielleicht manipuliert werden, indem eine nicht nette person. Also das Schlimmste, was passieren sollte sind invaild key-value-Tupeln, aber sollte nicht zu bringen, alle anderen Sicherheitsrisiken beiseite.
Beispiel:
Map<String,String> map = ...
String encoded = Base64.encode(map);
//somewhere else
Map<String,String> map = Base64.decode(encoded);
Ja, muss Base64. Nicht wie, dass oder dass oder eine andere. Gibt es eine einfache Lösung (Single-Utils-Klasse bevorzugt) gibt? Oder muss ich meine eigenen erstellen?
Nichts besseres ein, als diese?
//marshalling
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(map);
oos.close();
String encoded = new String(Base64.encodeBase64(baos.toByteArray()));
//unmarshalling
byte[] decoded = Base64.decodeBase64(encoded.getBytes());
ByteArrayInputStream bais = new ByteArrayInputStream(decoded);
ObjectInputStream ois = new ObjectInputStream(bais);
map = (Map<String,String>) ois.readObject();
ois.close();
Dank,
- Was ist die funktionale Anforderung? I. e. was brauchen Sie für diese? Nur dann können wir beurteilen, über den besten Ansatz.
- meine Hauptanforderungen sind: - codierte string sollte so kurz wie möglich und enthalten nur lateinische Zeichen oder Zeichen aus dem base64-alphabet (nicht mein nennen). es gibt keine andere reqs.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Google Gson zu konvertieren
Map
zu JSON. VerwendenGZIPOutputStream
zum komprimieren der JSON-string. Verwenden Apache-Commons-CodecBase64
oderBase64OutputStream
zum codieren der komprimierten bytes in eine Base64-Zeichenkette.Kickoff Beispiel:
Weitere Möglichkeit wäre die Verwendung JSON das ist ein sehr ligthweight lib.
Die Codierung würde dann wie folgt Aussehen:
Ihre Lösung funktioniert. Der einzige andere Ansatz wäre, zu serialisieren der Karte selbst (Iteration über die Schlüssel und Werte). Das würde bedeuten, dass Sie müssten, um sicherzustellen, dass Sie behandeln alle Fälle korrekt (zum Beispiel, wenn Sie senden die Werte als
key=value
Sie müssen einen Weg finden, zu ermöglichen=
im Schlüssel/Wert und trennen Sie die Paare irgendwie, das heißt, Sie müssen auch erlauben, diese Trennung-Zeichen im Namen, etc.).Alles in allem, es ist schwer zu bekommen Recht, einfach zu bekommen, falsch und würde eine ganze Menge mehr code und Kopfschmerzen. Und vergessen Sie nicht, dass Sie hätte viel zu schreiben von code zur Fehlerbehandlung im parser (Empfänger-Seite).