<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://wiki.cifprodolfoucha.es/index.php?action=history&amp;feed=atom&amp;title=Serializaci%C3%B3n_en_ficheiros</id>
	<title>Serialización en ficheiros - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.cifprodolfoucha.es/index.php?action=history&amp;feed=atom&amp;title=Serializaci%C3%B3n_en_ficheiros"/>
	<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=Serializaci%C3%B3n_en_ficheiros&amp;action=history"/>
	<updated>2026-10-17T10:43:20Z</updated>
	<subtitle>Historial de revisiones de esta página en el wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>https://wiki.cifprodolfoucha.es/index.php?title=Serializaci%C3%B3n_en_ficheiros&amp;diff=17573&amp;oldid=prev</id>
		<title>Joselv: Página creada con «= Serialización en ficheiros = Qué é a serialización de obxectos? A serialización é un proceso de trasformación que nos permite codificar obxectos da nosa arquitectu…»</title>
		<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=Serializaci%C3%B3n_en_ficheiros&amp;diff=17573&amp;oldid=prev"/>
		<updated>2022-02-28T15:18:38Z</updated>

		<summary type="html">&lt;p&gt;Página creada con «= Serialización en ficheiros = Qué é a serialización de obxectos? A serialización é un proceso de trasformación que nos permite codificar obxectos da nosa arquitectu…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Serialización en ficheiros =&lt;br /&gt;
Qué é a serialización de obxectos? A serialización é un proceso de trasformación que nos permite codificar obxectos da nosa arquitectura orientada a obxectos. Esta codificación sírvenos para transmitir ou almacenar obxectos. No noso caso vamos a traballar nunha forma de almacenamento e recuperación de obxectos en ficheiros, pero a serialización tamén é úsada en sockets, en modelos cliente servidor etc… e decir fluxos (stream).&lt;br /&gt;
&lt;br /&gt;
A necesidade de serialización xurde no propio paradigma de programación orientada a obxectos. E moito máis cómodo e natural andar a manexar obxectos, que non datos primitivos ou cadeas de alfanuméricos obtidos de ficheiros. Entón Java permitenos gardar e recuperar obxectos en ficheiros binarios.&lt;br /&gt;
&lt;br /&gt;
Para a serialización de obxectos (que non é máis que escribir ou ler un obxecto completo) fai falla un obxecto serializable: unha secuencia de bytes que contén datos do propio obxecto e metadatos do mesmo. Estos metadatos son o tipo de obxecto que é e a súa arquitectura interna (datos primitivos ou referencias a outros obxectos).&lt;br /&gt;
	Para indicar a Java que un obxeto é serializable a sua clase ten que implementar a interfaz Serializable, desta forma:&lt;br /&gt;
 &lt;br /&gt;
Public class Agenda implements Serializable {&lt;br /&gt;
  private String nombre;&lt;br /&gt;
  private String p_Apellido;&lt;br /&gt;
  private transient String s_Apellido;&lt;br /&gt;
  …&lt;br /&gt;
  …&lt;br /&gt;
  public Agenda(String nombre, String p_Apellido, String s_Apellido){&lt;br /&gt;
    this.nombre = nombre;&lt;br /&gt;
    this.p_Apellido = p_Apellido;&lt;br /&gt;
    this.s_Apellido = s_Apellido;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Aspectos útiles a ter en conta na serialización:&lt;br /&gt;
* Coa herdanza as clases fillo son tamén serializable se o son no pai.&lt;br /&gt;
* Todo os atributos de clase tipo primitivo son serializables.&lt;br /&gt;
* Se non se desexa serializar algún atributo úsase o modificador transient.&lt;br /&gt;
* Unha interfaz non se pode serializar.&lt;br /&gt;
* As colecciones de obxectos pódense serializar.&lt;br /&gt;
* SerialVersionUID: é un identificador de clases cando serializamos os seus obxectos. Vai ser un atributo da clase de tipo long, estático e inmutable (final):&lt;br /&gt;
private static final long serialVersionUID = 4L;&lt;br /&gt;
&lt;br /&gt;
Para todo o proceso de serialización e deserialización temos dúas clases ObjectInputStream e ObjectOutputStream, que se expoñen a continuación.&lt;br /&gt;
&lt;br /&gt;
== Escritura e serialización de obxectos ==&lt;br /&gt;
Na escritura de un obxecto nun ficheiro necesitamos crear un fluxo de saída primeiro. O máis frecuente é coa clase FileOutputStream, a partires do fluxo xa podemos crear un obxecto ObjectOutputStream, que ten o método de escritura:&lt;br /&gt;
* void writeObject(Object o): método de escritura dun obxecto no fluxo que se lle pasa como parámetro.&lt;br /&gt;
&lt;br /&gt;
Exemplo→ paquete unidad1.serializacion.CreateSequentialFile.java&lt;br /&gt;
&lt;br /&gt;
== Lectura e deserialización de obxectos ==&lt;br /&gt;
A lectura é moi semellante a escritura; é necesario crear un obxecto de lectura de fluxo co FileInputStream. Despois xeneramos ObjectInputStream que ten o método de lectura:&lt;br /&gt;
* Object readObject(): obtense un obxecto do ficheiro e deserializao, de maneira secuencial, un detrás doutro.&lt;br /&gt;
&lt;br /&gt;
Exemplo→ paquete unidad1.serializacion.ReadSequentialFile.java&lt;br /&gt;
&lt;br /&gt;
Problema na sobreescritura de ficheiros na serialización:&lt;br /&gt;
&lt;br /&gt;
	Se intentas abrir e agregar novos obxectos nun ficheiro xa utilizado, é decir agregar obxectos, o máis probable é que cando queras ler che apareza o seguinte erro:&lt;br /&gt;
Error → IOException: invalid type code: AC&lt;br /&gt;
É provocado porque se crea unha cabeceira extra sempre que se abre o ficheiro en modo escritura. Esa cabeceira ten a información dos metadatos dos obxectos almacenados e non pode estar duplicada.&lt;br /&gt;
Para arranxar este problema hai que programar un propio ObjectOutputStream e sobreescribir o método writeStreamHeader:&lt;br /&gt;
&lt;br /&gt;
Exemplo → SobreEscrituraSer.java&lt;br /&gt;
&lt;br /&gt;
= Actividades =&lt;br /&gt;
== Actividade 1 - Almacenar lista de obxectos nun ficheiro ==&lt;br /&gt;
	Crea un programa que almacene nunha lista obxectos Employee e se almace nun ficheiro. Logo debes recuperar esa lista de obxecto do ficheiro.&lt;br /&gt;
Solución: unidad1.actividadeSer&lt;br /&gt;
&lt;br /&gt;
== Actividade 2 ==&lt;br /&gt;
&lt;br /&gt;
De Ferrol yo tengo una parecida pero mezcla más cosas:&lt;br /&gt;
https://wiki.cifprodolfoucha.es/index.php?title=Prog._Ficheros#Ejercicio_propuesto:_Aplicando_el_polimorfismo&lt;/div&gt;</summary>
		<author><name>Joselv</name></author>
		
	</entry>
</feed>