00
Vista general

Todas las técnicas de un vistazo

Del IV al IX leemos el mismo menú y sacamos la misma salida. Lo único que cambia es cómo se recorre el fichero.

Los cuatro modelos la idea clave

Árbol · DOM, Gson árbol

Lo cargo todo

Se lee el documento entero y se guarda en memoria como un árbol. Puedes ir a cualquier nodo, en cualquier orden.

Fácil, pero gasta mucha RAM.

Push · SAX

El parser me llama

El parser lee de arriba abajo y va ejecutando tus métodos: startElement, characters, endElement.

Poca memoria, código más lioso.

Pull · StAX, Jackson streaming

Yo le pido

Tu programa pide el siguiente trozo con next() dentro de un bucle. Tú decides cuándo avanzar o parar.

Poca memoria y más legible que SAX.

Binding · Gson, Jackson, JAXB

Lo convierte solo

Describes el formato con clases y anotaciones, y la librería pasa de fichero a objetos (y al revés) en una línea.

Lo más rápido de programar. Necesita Maven.

Tabla comparativa para el examen

Ej.TécnicaFormatoModeloQuién controlaMemoriaEscribeClases propiasMaven
IIISerializaciónbinarioObjetos enterosJavaLo que ocupenSíLlibre, GestorLlibresNo
IVDOMXMLÁrbolTú navegas el árbolAlta (5–10× el fichero)Sí, con TransformerPlatNo
VGsonJSONBindingGsonAltaSí, toJsonMenu, Plat, Descripcio, GrupSí
VISAXXMLPushEl parserMuy bajaNoPlat, MenuHandlerNo
VIIStAXXMLPullTu bucle next()Muy bajaNo (en el ejercicio)PlatNo
VIIIJacksonJSONBinding (o pull)ObjectMapperMediaSí, writeValueMenu, Plat, Descripcio, Grup + 2 transformadasSí
IXJAXBXMLBindingJAXB (usa SAX/StAX)MediaSí, marshalMenu, Plat, Descripcio, Grup + 3 transformadasSí

¿Cuál uso? regla rápida

Según lo que necesito

  • Guardar objetos Java y recuperarlos en el mismo programa → Serialización.
  • Fichero pequeño que quiero consultar o modificar en cualquier orden → DOM.
  • Fichero enorme, solo leer de principio a fin → SAX.
  • Fichero grande pero quiero código claro o parar a mitad → StAX.
  • Formato conocido y quiero trabajar con mis clases → Gson / Jackson (JSON) o JAXB (XML).

Parsing y binding

Parsing: convertir el texto del fichero en una estructura genérica (árbol, eventos, tokens).

Binding: pasar automáticamente esa estructura a objetos Java (POJOs) y al revés.

Puede haber parsing sin binding (DOM, SAX, StAX), pero no binding sin parsing.

Los ficheros de datos el menú de todos los ejercicios

Cada plato tiene Descripcio y Tipus dos veces: una del plato y otra dentro de Grup. Esa repetición es la que obliga a usar dinsGrup en SAX y StAX.

MenuXML.xmlIV · VI · VII · IX
<?xml version="1.0" encoding="UTF-8"?>
<Menu>
    <Plat>
        <Descripcio codi="A01" preu="10">Macarrons</Descripcio>
        <Tipus>Plat Principal</Tipus>
        <Grup id="01">
            <Descripcio>Aliments farinosos</Descripcio>
            <Tipus>Pasta</Tipus>
        </Grup>
    </Plat>
    <Plat>
        <Descripcio codi="A35" preu="3">Macedònia</Descripcio>
        <Tipus>Postre</Tipus>
        <Grup id="03">
            <Descripcio>Origen vegetal</Descripcio>
            <Tipus>Fruita</Tipus>
        </Grup>
    </Plat>
    <!-- ... A24 Pastís de formatge, A56 Vedella amb bolets -->
</Menu>
MenuJSON.jsonV · VIII
{
  "Menu": [
    {
      "Descripcio": {
        "codi": "A01",
        "preu": 10,
        "text": "Macarrons"
      },
      "Tipus": "Plat Principal",
      "Grup": {
        "id": "01",
        "Descripcio": "Aliments farinosos",
        "Tipus": "Pasta"
      }
    }
    // ... A35, A24, A56
  ]
}

Montar el proyecto en Eclipse lo que nos dio guerra

Sin Maven (III, IV, VI, VII)

DOM, SAX y StAX vienen incluidos en Java. Basta con File → New → Java Project.

Si Eclipse crea module-info.java, bórralo.

Con Maven (V, VIII, IX)

  • Haz clic en un hueco vacío del Project Explorer antes de crear el proyecto.
  • Marca Create a simple project y Use default Workspace location.
  • Packaging = jar, no pom: con pom no se compila tu código.
  • Parent Project vacío.
  • Tras tocar el pom.xml: Maven → Update Project.

El fichero de datos va en la raíz del proyecto, al lado de pom.xml y fuera de src. Si no, sale El fitxer o directori no existeix. Los ficheros que genera el programa aparecen ahí después de pulsar F5.

INS Marianao · DAM 2 · M0486 Accés a Dades. Código con comentarios en castellano, listo para Eclipse.