Julio Ripoll Moreno Blog

Bienvenido a mi blog

Serialver - Generador java de número de serie UID

Serialver es una herramienta incorporada a JDK. Se usa para obtener números de serialVersionUID de una o más clases de Java.

Básicamente, una clase serializable debe declarar una constante llamada serialVersionUID (ya sea explícitamente por el programador o implícitamente por el compilador) como esta:

import java.io.Serializable;

public class Book implements Serializable {

    private static final long serialVersionUID = 1234L;
       
}

El número serialVersionUID es importante cuando se trata de la serialización/deserialización de objetos de una clase. El comando serialver es útil en caso de que deseemos saber ese número sin tener el código fuente de la clase.

Su sintaxis es tan simple como la siguiente:

serialver [-classpath classpath] [-show] [classname...]
  • La opción -classpath especifica dónde buscar las clases (en directorios o archivos jar, separados por punto y coma;).
  • La opción -show muestra una interfaz de usuario sencilla que permite al usuario ingresar un nombre de clase completo y luego presionar la tecla Enter o hacer clic en el botón Show para mostrar el número serialVersionUID.

Ahora, veamos algunos ejemplos:
Partimos de la clase:

import java.io.Serializable;
import java.math.BigDecimal;

public class Book implements Serializable {

    String title;

    String author;

    BigDecimal price;

    Book(String title, String author, BigDecimal price){
        this.title = title;
        this.author = author;
        this.price = price;
    }

    public String getTitle(){
        return title;
    }
    public String getAuthor(){
        return author;
    }
    public BigDecimal getPrice(){
        return price;
    }
       
}
  • Obtener serialVersionUID de una clase en el paquete predeterminado:
javac Book.java
serialver Book

Output:

Book:    private static final long serialVersionUID = -5356272207580456547L;

Si la clase especificada no es serializable, se muestra este mensaje:

Class Book is not Serializable.
  • Obtener serialVersionUID de una clase en un paquete específico:
    El siguiente comando muestra el serialVersionUID de la clase Book bajo el paquete es.jripoll.store, suponiendo que las clases se encuentran en el directorio build/classes:
mkdir build build/classes
javac -d build/classes Book.java
serialver -classpath build/classes es.jripoll.store.Book

Output:

es.jripoll.store.Book:    private static final long serialVersionUID = -5082803711895694981L;
  • Obtener serialVersionUID de una clase Groovy en un paquete específico:
    Partimos de la clase Book.groovy:
package es.jripoll.store;

import java.io.Serializable;
import java.math.BigDecimal;

public class Book implements Serializable {

    String title;
    String author;
    BigDecimal price;
}

Y procedemos a obtener el número de serie UID:

groovyc -d  build/classes/ src/main/groovy/es/jripoll/store/Book.groovy
serialver -classpath "$GROOVY_HOME/lib/*:./build/classes" es.jripoll.store.Book

Output:

es.jripoll.store.Book:    private static final long serialVersionUID = 4387351693220399732L;
comments powered by Disqus