2017-08-18 1 views
0

Ich lese What is a serialVersionUID and why should I use it? und static final long serialVersionUID = 1L. Von diesen beiden SO-Posts habe ich eine ungefähre Vorstellung davon, was es ist. Es ist eine ID für eine serialisierbare Klasse, die verwendet wird, um zu überprüfen, ob der Sender und der Empfänger während der Deserialisierung kompatibel sind. Wenn nicht, wird InvalidClassException geworfen.serialVersionUID ohne L, xxxxxxxxxxxxxxxxxL vs 1L, positiv vs. negativ

Ich bin aber neugierig über ein paar Dinge:

  • serialVersionUID scheint in 2 „Typ“ unterteilt werden. 19 Zahlen gefolgt von L xxxxxxxxxxxxxxxxxxxl oder 269l oder 1l. Diese Zahlen scheinen nicht beliebig gewählt zu sein. Wenn wir einfach eine ID brauchen, würde keine Nummer funktionieren? Was ist die Logik hinter diesem Design?
  • Für die 20 Zeichen lang serialVersionUID kann es positiv oder negativ sein. Was ist der Unterschied. Auch wenn serialVersionUID zum Zwecke der Identifizierung verwendet wird, warum brauchen wir eine negative Zahl? Wir haben noch nicht alle positiven Zahlen aufgebraucht.
  • In MirroredTypedException.java ist die serialVersionUID 269 ohne die L. Es ist der einzige serialVersionUID Ich fand ohne die L. Warum das? Was bedeutet L?

eine Momentaufnahme (dieser Schnappschuss enthält nicht alle von ihnen)

enter image description here

Antwort

1

serialVersionUID scheint kann teilen sich in zwei "Typ"

nicht wirklich sein. Sie sind alle nur long s.

Für die 20 Zeichen lange serialVersionUID kann es positiv oder negativ sein.

Diese werden alle zufällig ausgewählt. Wenn Sie nach dem Zufallsprinzip eine Zahl zwischen und Long.MAX_VALUE wählen, wird es meistens 19 Ziffern haben, und die Hälfte der Zeit wird es negativ sein.

Manchmal können sie aus einem Hash von etwas generiert werden (z. B. Quellcode, eine XML-Definition usw.). Wenn die Hash-Funktion gut ist, dann ist die Verteilung der Zahlen die gleiche wie wenn Sie nur zufällig wählen.

Warum ist das? Was bedeutet L?

L identifies a literal of type long. Es wird nicht für 269 benötigt, da es in den Bereich von int passt und automatisch zu long upcast wird.

Verwandte Themen