Ich arbeite an der Umwandlung einer Reihe von alten Tab-getrennte MySQL-Datenbank-Dump-Dateien in Protocol Buffers und haben in einen Haken geraten. Die MySQL-Tabelle enthält ein Feld vom Typ int(11) unsigned
, das ich in der .proto
-Datei dem Protobuf uint32
zugeordnet habe. Wenn Sie die MySQL-Datensätze analysieren und versuchen, sie in eine protobuf-Nachricht zu konvertieren, ist es verlockend, dieses Feld mit Integer.valueOf(String)
(oder Long.valueOf(String)
zu analysieren, um Überläufe zu vermeiden). Die Protocol Buffers Language Guide zeigt jedoch here an, dass in Java uint32
s unter Verwendung des int
-Datentyps dargestellt sind, wobei jedoch das erste Bit als höchstwertiges Bit und nicht als Vorzeichenbit umgedeutet wird.Wie konvertiere ich MySQL nicht signierte Ints in Protocol Buffer uint32s in Java?
Also, bevor ich meine eigenen String
schreiben gehen ->uint32
-flavored- int
Parser, dachte ich es wert war, zu fragen, ob jemand anderes bereits dieses spezielle Problem gelöst hat. Was ist die korrekte Art, eine String
Darstellung von MySQL int unsigned
in einen Protokollpuffer uint32
in Java zu konvertieren?
Ich war zu einer ähnlichen Schlussfolgerung gekommen, aber Sie implementieren es sauberer als ich es getan habe. Dies deutet auf eine ähnliche Frage hin: Wie kann man "unsigned bigint" mit Hilfe von Java zu protobuf "uint64" parsen? –
Ihre Lösung schlägt auch vor, dass das Konvertieren einfach ausgeführt werden kann, indem Sie von "int" zu "long" zurückwerfen, was nett ist. –
@JoshHansen, habe ich meine Antwort als Antwort auf beide Kommentare aktualisiert. – MvG