Ich möchte ein Zeichenarray in ein Bytearray in Java konvertieren. Welche Methoden gibt es für diese Konvertierung?
java
arrays
type-conversion
Arun Abraham
quelle
quelle
Konvertieren ohne
String
Objekt zu erstellen :Verwendung:
Die Lösung basiert auf der Empfehlung von Swing, Passwörter in char [] zu speichern. (Siehe Warum wird char [] für Passwörter gegenüber String bevorzugt? )
Denken Sie daran, keine vertraulichen Daten in Protokolle zu schreiben und sicherzustellen, dass JVM keine Verweise darauf enthält.
Der obige Code ist korrekt, aber nicht wirksam. Wenn Sie keine Leistung benötigen, aber Sicherheit wünschen, können Sie diese verwenden. Wenn Sicherheit auch kein Ziel ist, dann einfach tun
String.getBytes
. Der obige Code ist nicht wirksam, wenn Sie sich die Implementierungencode
in JDK ansehen . Außerdem müssen Sie Arrays kopieren und Puffer erstellen. Eine andere Möglichkeit zum Konvertieren besteht darin, den gesamten Code inline zu integrierenencode
(Beispiel für UTF-8 ):Entschuldigen Sie, dass ich die Scala-Sprache verwende. Wenn Sie Probleme beim Konvertieren dieses Codes in Java haben, kann ich ihn neu schreiben. Was ist mit der Leistung? Überprüfen Sie immer die realen Daten (z. B. mit JMH). Dieser Code sieht dem in JDK [ 2 ] und Protobuf [ 3 ] sehr ähnlich .
quelle
Bearbeiten: Andreys Antwort wurde aktualisiert, sodass Folgendes nicht mehr gilt.
Andreys Antwort (die höchste, die zum Zeitpunkt des Schreibens gewählt wurde) ist leicht falsch. Ich hätte dies als Kommentar hinzugefügt, aber ich bin nicht seriös genug.
In Andreys Antwort:
Der Aufruf von array () gibt möglicherweise nicht den gewünschten Wert zurück, zum Beispiel:
Ausgabe:
Wie zu sehen ist, wurde ein Null-Byte hinzugefügt. Um dies zu vermeiden, verwenden Sie Folgendes:
Ausgabe:
Da die Antwort auch auf die Verwendung von Passwörtern anspielte, kann es sinnvoll sein, das Array auszublenden, das den ByteBuffer unterstützt (Zugriff über die Funktion array ()):
quelle
averageBytesPerChar()
etwas anderes als 1 zurückgegeben wird (ich erhalte 1.1). Aus Interesse, welches Betriebssystem / welchen Arch Sie verwenden, habe ich mit Oracle 1.7.0_51 und openjdk 1.7.0_51 doppelt überprüft und festgestellt, dass es mit 10 Zeichen defekt ist.buffer.array()
in dertoBytes
Funktion noch überschrieben werden muss, derzeit nur die Kopie.quelle
Sie könnten eine Methode machen:
Hoffe das hilft
quelle