Sto lavorando alla conversione di un gruppo di vecchi file di dump di database MySQL con separatori di tabulazione in Buffer di protocollo e sono rimasti intrappolati. La tabella MySQL include un campo di tipo int(11) unsigned
, che ho mappato a protobuf uint32
nel file .proto
. Quando si analizzano i record MySQL e si tenta di convertirli in un messaggio protobuf, si è tentati di analizzare il campo utilizzando Integer.valueOf(String)
(o Long.valueOf(String)
per evitare gli overflow). Tuttavia, lo Protocol Buffers Language Guide indica here che in Java, uint32
s sono rappresentati utilizzando il tipo di dati int
, ma con il primo bit che viene reinterpretato come il bit di ordine più alto anziché come bit di segno.Come convertire gli interi non firmati MySQL nel protocollo Buffer uint32s in Java?
Quindi prima di andare scrivere il mio String
->uint32
-flavored- int
parser, ho pensato che fosse la pena chiedere se qualcun altro ha già risolto questo problema particolare. Qual è il modo corretto di convertire una rappresentazione String
di MySQL int unsigned
in un buffer di protocollo uint32
in Java?
Ero giunto a una conclusione simile, ma l'hai implementato in modo più pulito di quanto non facessi io. Questo suggerisce una domanda simile: come analizzare 'bigint unsigned 'su protobuf' uint64' tramite Java? –
La tua soluzione suggerisce anche che la non-conversione può essere fatta semplicemente rimandando da 'int' a' long', che è bello. –
@JoshHansen, ho aggiornato la mia risposta in risposta a entrambi i vostri commenti. – MvG