[{"data":1,"prerenderedAt":1058},["ShallowReactive",2],{"navigation_docs":3,"-archivos-ui-archivo-objeto":412,"-archivos-ui-archivo-objeto-surround":1053},[4,18,43,118,160,200,231,320,346],{"title":5,"path":6,"stem":7,"children":8,"icon":17},"Evaluación","\u002Fintroduction","1.introduction\u002F1.index",[9,12],{"title":10,"path":6,"stem":7,"icon":11},"Método de Evaluación","i-iconamoon-cheque-bold",{"title":13,"path":14,"stem":15,"icon":16},"Plataforma de Aprendizaje","\u002Fintroduction\u002Fplataforma","1.introduction\u002F2.plataforma","i-lucide-book-marked","i-lucide-house",{"title":19,"icon":20,"path":21,"stem":22,"children":23,"page":42},"Entorno de desarrollo","i-codicon-edit-code","\u002Fide","2.ide",[24,28,33,37],{"title":25,"path":26,"stem":27,"icon":20},"¿Qué es un IDE?","\u002Fide\u002Fentorno","2.ide\u002F1.entorno",{"title":29,"path":30,"stem":31,"icon":32},"Estructura de un Proyecto","\u002Fide\u002Festructura","2.ide\u002F2.estructura","i-clarity-tree-view-line",{"title":34,"path":35,"stem":36,"icon":20},"La compilación en un IDE","\u002Fide\u002Fcompilacion","2.ide\u002F3.compilacion",{"title":38,"path":39,"stem":40,"icon":41},"Depuración de Código","\u002Fide\u002Fdepurar","2.ide\u002F4.depurar","i-lucide-bug",false,{"title":44,"icon":45,"path":46,"stem":47,"children":48,"page":42},"Clases y Objetos","i-catppuccin-java-class","\u002Fclases-objetos","3.clases-objetos",[49,53,57,62,66,70,74,78,83,88,92,96,101,106,110,114],{"title":50,"path":51,"stem":52},"Repaso previo a Clases y Objetos","\u002Fclases-objetos\u002Fpreview","3.clases-objetos\u002F00.preview",{"title":54,"path":55,"stem":56,"icon":45},"¿Qué es la Programación Orientada a Objetos (POO)?","\u002Fclases-objetos\u002Fpoo","3.clases-objetos\u002F01.poo",{"title":58,"path":59,"stem":60,"icon":61},"Diagramas de Clases y Objetos","\u002Fclases-objetos\u002Fdiagramas","3.clases-objetos\u002F02.diagramas","i-devicon-uml",{"title":63,"path":64,"stem":65,"icon":45},"Las Clases","\u002Fclases-objetos\u002Fclases","3.clases-objetos\u002F03.clases",{"title":67,"path":68,"stem":69,"icon":45},"Ámbito y Visibilidad","\u002Fclases-objetos\u002Fambito","3.clases-objetos\u002F04.ambito",{"title":71,"path":72,"stem":73,"icon":45},"Declaración e Instanciación de Objetos","\u002Fclases-objetos\u002Fobjetos","3.clases-objetos\u002F05.objetos",{"title":75,"path":76,"stem":77,"icon":45},"Clases Predefinidas en Java","\u002Fclases-objetos\u002Fpredefinidas","3.clases-objetos\u002F06.predefinidas",{"title":79,"path":80,"stem":81,"icon":82},"Paquetes en Java","\u002Fclases-objetos\u002Fpaquetes","3.clases-objetos\u002F07.paquetes","i-material-icon-theme-folder-java-open",{"title":84,"path":85,"stem":86,"icon":87},"Las Excepciones","\u002Fclases-objetos\u002Fexcepciones","3.clases-objetos\u002F08.excepciones","i-catppuccin-java-exception",{"title":89,"path":90,"stem":91,"icon":45},"La clase JOptionPane","\u002Fclases-objetos\u002Fjoptionpane","3.clases-objetos\u002F09.joptionpane",{"title":93,"path":94,"stem":95,"icon":45},"Constructores y Accesores","\u002Fclases-objetos\u002Fconstructores","3.clases-objetos\u002F10.constructores",{"title":97,"path":98,"stem":99,"icon":100},"Tipos Enumerados (Enums)","\u002Fclases-objetos\u002Fenumerados","3.clases-objetos\u002F11.enumerados","i-catppuccin-java-enum",{"title":102,"path":103,"stem":104,"icon":105},"Modificadores de acceso static y final","\u002Fclases-objetos\u002Fmodificadores","3.clases-objetos\u002F12.modificadores","i-mdi-chart-box",{"title":107,"path":108,"stem":109,"icon":105},"El casting en Java","\u002Fclases-objetos\u002Fcasting","3.clases-objetos\u002F13.casting",{"title":111,"path":112,"stem":113},"Las Expresiones Regulares","\u002Fclases-objetos\u002Fexpresiones-regulares","3.clases-objetos\u002F14.expresiones-regulares",{"title":115,"path":116,"stem":117,"icon":105},"Clases Genéricas en Java","\u002Fclases-objetos\u002Fclases-genericas","3.clases-objetos\u002F15.clases-genericas",{"title":119,"icon":120,"path":121,"stem":122,"children":123,"page":42},"Funciones (Métodos)","i-material-symbols-function","\u002Fmetodos","4.metodos",[124,128,132,136,140,144,148,152,156],{"title":125,"path":126,"stem":127},"Funciones Genéricas","\u002Fmetodos\u002Ffuncion-generica","4.metodos\u002F01.funcion-generica",{"title":129,"path":130,"stem":131},"Métodos de Instancia y de Clase","\u002Fmetodos\u002Finstancia-clase","4.metodos\u002F02.instancia-clase",{"title":133,"path":134,"stem":135},"Sobrecarga de Funciones","\u002Fmetodos\u002Fsobrecarga","4.metodos\u002F03.sobrecarga",{"title":137,"path":138,"stem":139},"Alcance de Variables y Métodos","\u002Fmetodos\u002Falcance","4.metodos\u002F04.alcance",{"title":141,"path":142,"stem":143},"Recursividad","\u002Fmetodos\u002Frecursividad","4.metodos\u002F05.recursividad",{"title":145,"path":146,"stem":147},"Puntero this","\u002Fmetodos\u002Fthis","4.metodos\u002F06.this",{"title":149,"path":150,"stem":151},"Los argumentos variables (varargs)","\u002Fmetodos\u002Fvarargs","4.metodos\u002F07.varargs",{"title":153,"path":154,"stem":155},"La clase Arrays","\u002Fmetodos\u002Farrays","4.metodos\u002F08.arrays",{"title":157,"path":158,"stem":159},"Predicados Simples y Compuestos en Java","\u002Fmetodos\u002Fpredicados","4.metodos\u002F09.predicados",{"title":161,"path":162,"stem":163,"children":164,"icon":199},"Herencia","\u002Fherencia","5.herencia\u002F01.index",[165,167,171,175,179,183,187,191,195],{"title":166,"path":162,"stem":163},"¿Qué es la herencia?",{"title":168,"path":169,"stem":170},"Sobreescritura de métodos y uso de `super`","\u002Fherencia\u002Fsobeescritura","5.herencia\u002F02.sobeescritura",{"title":172,"path":173,"stem":174},"Tipos de herencia","\u002Fherencia\u002Ftipos-herencia","5.herencia\u002F03.tipos-herencia",{"title":176,"path":177,"stem":178},"La clase Object en Java","\u002Fherencia\u002Fobject","5.herencia\u002F04.object",{"title":180,"path":181,"stem":182},"Polimorfismo","\u002Fherencia\u002Fpolimorfismo","5.herencia\u002F05.polimorfismo",{"title":184,"path":185,"stem":186},"Clases y Funciones Abstractas","\u002Fherencia\u002Fabstract","5.herencia\u002F06.abstract",{"title":188,"path":189,"stem":190},"Interfaces","\u002Fherencia\u002Finterfaces","5.herencia\u002F07.interfaces",{"title":192,"path":193,"stem":194},"Funciones e Interfaces","\u002Fherencia\u002Ffunciones-interfaces","5.herencia\u002F08.funciones-interfaces",{"title":196,"path":197,"stem":198},"Interfaces y Funciones Lambda","\u002Fherencia\u002Flambda-interface","5.herencia\u002F09.lambda-interface","i-material-symbols-heritage",{"title":201,"path":202,"stem":203,"children":204,"icon":199},"Arreglos","\u002Farreglos","6.arreglos\u002F01.index",[205,207,211,215,219,223,227],{"title":206,"path":202,"stem":203},"Los arreglos en Java",{"title":208,"path":209,"stem":210},"Los arreglos","\u002Farreglos\u002Farray","6.arreglos\u002F02.array",{"title":212,"path":213,"stem":214},"Matrices","\u002Farreglos\u002Fmatrices","6.arreglos\u002F03.matrices",{"title":216,"path":217,"stem":218},"Comparadores","\u002Farreglos\u002Fcomparator","6.arreglos\u002F04.comparator",{"title":220,"path":221,"stem":222},"Arreglos dinámicos: ArrayList","\u002Farreglos\u002Farraylist","6.arreglos\u002F05.arraylist",{"title":224,"path":225,"stem":226},"Arreglos Relacionales: HashMap","\u002Farreglos\u002Fhashmap","6.arreglos\u002F06.hashmap",{"title":228,"path":229,"stem":230},"La clase Stream en Java","\u002Farreglos\u002Fstream","6.arreglos\u002F07.stream",{"title":232,"icon":199,"path":233,"stem":234,"children":235,"page":42},"Archivos e Interfaz de Usuario","\u002Farchivos-ui","7.archivos-ui",[236,240,244,248,252,256,260,264,268,272,276,280,284,288,292,296,300,304,308,312,316],{"title":237,"path":238,"stem":239},"El paquete Swing","\u002Farchivos-ui\u002Fswing","7.archivos-ui\u002F01.swing",{"title":241,"path":242,"stem":243},"La clase JFrame y el JPanel","\u002Farchivos-ui\u002Fjpanel","7.archivos-ui\u002F02.jpanel",{"title":245,"path":246,"stem":247},"Los Layouts en Swing","\u002Farchivos-ui\u002Flayout","7.archivos-ui\u002F03.layout",{"title":249,"path":250,"stem":251},"Iniciando con Swing","\u002Farchivos-ui\u002Finiciando","7.archivos-ui\u002F04.iniciando",{"title":253,"path":254,"stem":255},"Las clases Color y Font en Swing","\u002Farchivos-ui\u002Fcolor-font","7.archivos-ui\u002F05.color-font",{"title":257,"path":258,"stem":259},"Etiquetas en Swing","\u002Farchivos-ui\u002Fetiquetas","7.archivos-ui\u002F06.etiquetas",{"title":261,"path":262,"stem":263},"Personalizando la apariencia de los componentes en Swing","\u002Farchivos-ui\u002Fpersonalizando","7.archivos-ui\u002F07.personalizando",{"title":265,"path":266,"stem":267},"Sobrescribiendo el método drawComponent() en Swing","\u002Farchivos-ui\u002Fdraw","7.archivos-ui\u002F08.draw",{"title":269,"path":270,"stem":271},"Manejando eventos en Swing","\u002Farchivos-ui\u002Feventos","7.archivos-ui\u002F09.eventos",{"title":273,"path":274,"stem":275},"Personalización de Componentes mediante la Extensión de Clases en Swing","\u002Farchivos-ui\u002Fextends-component","7.archivos-ui\u002F10.extends-component",{"title":277,"path":278,"stem":279},"Gradientes","\u002Farchivos-ui\u002Fgradientes","7.archivos-ui\u002F11.gradientes",{"title":281,"path":282,"stem":283},"Botones en Swing","\u002Farchivos-ui\u002Fbotones","7.archivos-ui\u002F12.botones",{"title":285,"path":286,"stem":287},"Los delegadores en Swing","\u002Farchivos-ui\u002Fdelegadores","7.archivos-ui\u002F13.delegadores",{"title":289,"path":290,"stem":291},"UI para nuestro RPG: Parte 1","\u002Farchivos-ui\u002Frpg-ui-1","7.archivos-ui\u002F14.rpg-ui-1",{"title":293,"path":294,"stem":295},"UI para nuestro RPG: Parte 2","\u002Farchivos-ui\u002Frpg-ui-2","7.archivos-ui\u002F15.rpg-ui-2",{"title":297,"path":298,"stem":299},"Los Streams Entrada y Salida","\u002Farchivos-ui\u002Fstreams","7.archivos-ui\u002F16.streams",{"title":301,"path":302,"stem":303},"Archivo tipo Objeto","\u002Farchivos-ui\u002Farchivo-objeto","7.archivos-ui\u002F17.archivo-objeto",{"title":305,"path":306,"stem":307},"UI para nuestro RPG: Parte 3","\u002Farchivos-ui\u002Frpg-ui-3","7.archivos-ui\u002F18.rpg-ui-3",{"title":309,"path":310,"stem":311},"UI para nuestro RPG: Parte 4","\u002Farchivos-ui\u002Frpg-ui-4","7.archivos-ui\u002F19.rpg-ui-4",{"title":313,"path":314,"stem":315},"UI para nuestro RPG: Parte 5","\u002Farchivos-ui\u002Frpg-ui-5","7.archivos-ui\u002F20.rpg-ui-5",{"title":317,"path":318,"stem":319},"UI para nuestro RPG: Parte 6","\u002Farchivos-ui\u002Frpg-ui-6","7.archivos-ui\u002F21.rpg-ui-6",{"title":321,"icon":322,"path":323,"stem":324,"children":325,"page":42},"Ejemplos","i-check-circle","\u002Fejemplos","8.ejemplos",[326,330,334,338,342],{"title":327,"path":328,"stem":329,"icon":105},"Ejemplo 1: Validando entradas con JOptionPane","\u002Fejemplos\u002Fejemplo-01","8.ejemplos\u002F01.ejemplo-01",{"title":331,"path":332,"stem":333},"Ejemplo 02: Uso de clases genéricas en Java","\u002Fejemplos\u002Fejemplo-02","8.ejemplos\u002F02.ejemplo-02",{"title":335,"path":336,"stem":337},"Ejemplo 03: Uso de Enum, Excepciones en Java","\u002Fejemplos\u002Fejemplo-03","8.ejemplos\u002F03.ejemplo-03",{"title":339,"path":340,"stem":341},"Ejemplo 4: Clase con funciones genéricas de validación","\u002Fejemplos\u002Fejemplo-04","8.ejemplos\u002F04.ejemplo-04",{"title":343,"path":344,"stem":345},"Ejemplo 5: Sistema de Gestión de Empleados","\u002Fejemplos\u002Fejemplo-05","8.ejemplos\u002F05.ejemplo-05",{"title":347,"icon":322,"path":348,"stem":349,"children":350,"page":42},"Actividades","\u002Factividades","9.actividades",[351,355,360,364,368,372,376,380,384,388,392,396,400,404,408],{"title":352,"path":353,"stem":354,"icon":105},"Actividad 1: Infografía sobre el proceso de compilación","\u002Factividades\u002Fact-01","9.actividades\u002F01.act-01",{"title":356,"path":357,"stem":358,"icon":359},"Actividad 2: Modelando Diagramas de Clases UML","\u002Factividades\u002Fact-02","9.actividades\u002F02.act-02","i-material-icon-theme-uml",{"title":361,"path":362,"stem":363,"icon":45},"Actividad 3: Creando Clases y Objetos en Java","\u002Factividades\u002Fact-03","9.actividades\u002F03.act-03",{"title":365,"path":366,"stem":367},"Actividad 4: Validando entradas de datos","\u002Factividades\u002Fact-04","9.actividades\u002F04.act-04",{"title":369,"path":370,"stem":371,"icon":105},"Actividad 5: Implementando una clase genérica","\u002Factividades\u002Fact-05","9.actividades\u002F05.act-05",{"title":373,"path":374,"stem":375,"icon":105},"Actividad 6: Expandiendo InputValidator con Predicados y Function","\u002Factividades\u002Fact-06","9.actividades\u002F06.act-06",{"title":377,"path":378,"stem":379,"icon":105},"Actividad 7: Gestor de Biblioteca con InputValidator","\u002Factividades\u002Fact-07","9.actividades\u002F07.act-07",{"title":381,"path":382,"stem":383,"icon":105},"Actividad 8: Calculadora de Figuras Geométricas","\u002Factividades\u002Fact-08","9.actividades\u002F08.act-08",{"title":385,"path":386,"stem":387,"icon":105},"Actividad 9: gestión de una empresa agroalimentaria","\u002Factividades\u002Fact-09","9.actividades\u002F09.act-09",{"title":389,"path":390,"stem":391,"icon":105},"Actividad 10: Sistema de gestión de clínicas veterinarias","\u002Factividades\u002Fact-10","9.actividades\u002F10.act-10",{"title":393,"path":394,"stem":395},"Definición de Proyecto Evolutivo","\u002Factividades\u002Frpg","9.actividades\u002F11.rpg",{"title":397,"path":398,"stem":399},"Actividad 11: Creación de Personajes","\u002Factividades\u002Fact-11","9.actividades\u002F12.act-11",{"title":401,"path":402,"stem":403},"Actividad 12: El Inventario y los Objetos","\u002Factividades\u002Fact-12","9.actividades\u002F13.act-12",{"title":405,"path":406,"stem":407},"Actividad 13: El combate por turnos","\u002Factividades\u002Fact-13","9.actividades\u002F14.act-13",{"title":409,"path":410,"stem":411},"Actividad 14: Guardando y Cargando","\u002Factividades\u002Fact-14","9.actividades\u002F15.act-14",{"id":413,"title":301,"body":414,"description":1047,"extension":1048,"links":1049,"meta":1050,"navigation":493,"path":302,"seo":1051,"stem":303,"__hash__":1052},"docs\u002F7.archivos-ui\u002F17.archivo-objeto.md",{"type":415,"value":416,"toc":1040},"minimark",[417,422,435,439,452,458,462,465,621,800,814,829,833,839,1002,1017,1021,1025,1036],[418,419,421],"h2",{"id":420},"qué-es-un-archivo-de-tipo-objeto","¿Qué es un Archivo de Tipo Objeto?",[423,424,425,426,430,431,434],"p",{},"Un archivo de tipo objeto en Java es un archivo que contiene objetos completos, en lugar de solo datos primitivos o texto. Para manejar este tipo de archivos, Java proporciona las clases ",[427,428,429],"code",{},"ObjectInputStream"," y ",[427,432,433],{},"ObjectOutputStream",", que permiten leer y escribir objetos de manera eficiente. Estos Streams se utilizan para serializar objetos, lo que significa convertir un objeto en una secuencia de bytes para almacenarlo en un archivo o transmitirlo a través de una red.",[418,436,438],{"id":437},"uso-de-objectoutputstream-y-objectinputstream","Uso de ObjectOutputStream y ObjectInputStream",[423,440,441,442,444,445,448,449,451],{},"Para escribir un objeto en un archivo, se puede utilizar la clase ",[427,443,433],{},". Es importante que la clase del objeto que se desea escribir implemente la interfaz ",[427,446,447],{},"Serializable",", lo que indica que el objeto puede ser serializado. Algo de suma importancia es que el proceso de serialización incluye toda la información del objeto, como sus atributos y su estado actual, es decir, si el archivo hace referencia a un objeto de una clase que tiene atributos, esa clase debe implementar la interfaz ",[427,450,447],{}," para que el objeto pueda ser serializado correctamente.",[423,453,454,455,457],{},"Así mismo, el principio de herencia también se aplica a la serialización, lo que significa que si una clase hija hereda de una clase padre que implementa ",[427,456,447],{},", la clase hija también será serializable. Esto es importante para garantizar que todos los objetos relacionados puedan ser serializados sin problemas.",[418,459,461],{"id":460},"escribir-un-objeto-en-un-archivo","Escribir un Objeto en un Archivo",[423,463,464],{},"Para escribir un objeto en un archivo, se puede usar el siguiente código:",[466,467,473],"pre",{"className":468,"code":469,"filename":470,"language":471,"meta":472,"style":472},"language-java shiki shiki-themes github-dark","import java.io.Serializable;\n\npublic class MyClass implements Serializable {\n    private String name;\n    private int age;\n\n    public MyClass(String name, int age) {\n        this.name = name;\n        this.age = age;\n    }\n\n    \u002F\u002F Getters y setters\n}\n","MyClass.java","java","",[427,474,475,488,495,517,526,537,542,569,585,597,603,608,615],{"__ignoreMap":472},[476,477,480,484],"span",{"class":478,"line":479},"line",1,[476,481,483],{"class":482},"snl16","import",[476,485,487],{"class":486},"s95oV"," java.io.Serializable;\n",[476,489,491],{"class":478,"line":490},2,[476,492,494],{"emptyLinePlaceholder":493},true,"\n",[476,496,498,501,504,508,511,514],{"class":478,"line":497},3,[476,499,500],{"class":482},"public",[476,502,503],{"class":482}," class",[476,505,507],{"class":506},"svObZ"," MyClass",[476,509,510],{"class":482}," implements",[476,512,513],{"class":506}," Serializable",[476,515,516],{"class":486}," {\n",[476,518,520,523],{"class":478,"line":519},4,[476,521,522],{"class":482},"    private",[476,524,525],{"class":486}," String name;\n",[476,527,529,531,534],{"class":478,"line":528},5,[476,530,522],{"class":482},[476,532,533],{"class":482}," int",[476,535,536],{"class":486}," age;\n",[476,538,540],{"class":478,"line":539},6,[476,541,494],{"emptyLinePlaceholder":493},[476,543,545,548,550,553,557,560,563,566],{"class":478,"line":544},7,[476,546,547],{"class":482},"    public",[476,549,507],{"class":506},[476,551,552],{"class":486},"(String ",[476,554,556],{"class":555},"s9osk","name",[476,558,559],{"class":486},", ",[476,561,562],{"class":482},"int",[476,564,565],{"class":555}," age",[476,567,568],{"class":486},") {\n",[476,570,572,576,579,582],{"class":478,"line":571},8,[476,573,575],{"class":574},"sDLfK","        this",[476,577,578],{"class":486},".name ",[476,580,581],{"class":482},"=",[476,583,584],{"class":486}," name;\n",[476,586,588,590,593,595],{"class":478,"line":587},9,[476,589,575],{"class":574},[476,591,592],{"class":486},".age ",[476,594,581],{"class":482},[476,596,536],{"class":486},[476,598,600],{"class":478,"line":599},10,[476,601,602],{"class":486},"    }\n",[476,604,606],{"class":478,"line":605},11,[476,607,494],{"emptyLinePlaceholder":493},[476,609,611],{"class":478,"line":610},12,[476,612,614],{"class":613},"sAwPA","    \u002F\u002F Getters y setters\n",[476,616,618],{"class":478,"line":617},13,[476,619,620],{"class":486},"}\n",[466,622,625],{"className":468,"code":623,"filename":624,"language":471,"meta":472,"style":472},"import java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.io.ObjectOutputStream;\n\npublic class WriteObjectToFile {\n    void main() {\n        MyClass myObject = new MyClass(\"John Doe\", 30);\n        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(\"myObject.dat\"))) {\n            oos.writeObject(myObject);\n            System.out.println(\"Objeto escrito en el archivo correctamente.\");\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n    }\n}\n","WriteObjectToFile.java",[427,626,627,634,641,648,652,663,674,701,732,743,758,774,785,790,795],{"__ignoreMap":472},[476,628,629,631],{"class":478,"line":479},[476,630,483],{"class":482},[476,632,633],{"class":486}," java.io.FileOutputStream;\n",[476,635,636,638],{"class":478,"line":490},[476,637,483],{"class":482},[476,639,640],{"class":486}," java.io.IOException;\n",[476,642,643,645],{"class":478,"line":497},[476,644,483],{"class":482},[476,646,647],{"class":486}," java.io.ObjectOutputStream;\n",[476,649,650],{"class":478,"line":519},[476,651,494],{"emptyLinePlaceholder":493},[476,653,654,656,658,661],{"class":478,"line":528},[476,655,500],{"class":482},[476,657,503],{"class":482},[476,659,660],{"class":506}," WriteObjectToFile",[476,662,516],{"class":486},[476,664,665,668,671],{"class":478,"line":539},[476,666,667],{"class":482},"    void",[476,669,670],{"class":506}," main",[476,672,673],{"class":486},"() {\n",[476,675,676,679,681,684,686,689,693,695,698],{"class":478,"line":544},[476,677,678],{"class":486},"        MyClass myObject ",[476,680,581],{"class":482},[476,682,683],{"class":482}," new",[476,685,507],{"class":506},[476,687,688],{"class":486},"(",[476,690,692],{"class":691},"sU2Wk","\"John Doe\"",[476,694,559],{"class":486},[476,696,697],{"class":574},"30",[476,699,700],{"class":486},");\n",[476,702,703,706,709,711,713,716,718,721,724,726,729],{"class":478,"line":571},[476,704,705],{"class":482},"        try",[476,707,708],{"class":486}," (ObjectOutputStream oos ",[476,710,581],{"class":482},[476,712,683],{"class":482},[476,714,715],{"class":506}," ObjectOutputStream",[476,717,688],{"class":486},[476,719,720],{"class":482},"new",[476,722,723],{"class":506}," FileOutputStream",[476,725,688],{"class":486},[476,727,728],{"class":691},"\"myObject.dat\"",[476,730,731],{"class":486},"))) {\n",[476,733,734,737,740],{"class":478,"line":587},[476,735,736],{"class":486},"            oos.",[476,738,739],{"class":506},"writeObject",[476,741,742],{"class":486},"(myObject);\n",[476,744,745,748,751,753,756],{"class":478,"line":599},[476,746,747],{"class":486},"            System.out.",[476,749,750],{"class":506},"println",[476,752,688],{"class":486},[476,754,755],{"class":691},"\"Objeto escrito en el archivo correctamente.\"",[476,757,700],{"class":486},[476,759,760,763,766,769,772],{"class":478,"line":605},[476,761,762],{"class":486},"        } ",[476,764,765],{"class":482},"catch",[476,767,768],{"class":486}," (IOException ",[476,770,771],{"class":555},"e",[476,773,568],{"class":486},[476,775,776,779,782],{"class":478,"line":610},[476,777,778],{"class":486},"            e.",[476,780,781],{"class":506},"printStackTrace",[476,783,784],{"class":486},"();\n",[476,786,787],{"class":478,"line":617},[476,788,789],{"class":486},"        }\n",[476,791,793],{"class":478,"line":792},14,[476,794,602],{"class":486},[476,796,798],{"class":478,"line":797},15,[476,799,620],{"class":486},[423,801,802,803,806,807,810,811,813],{},"Como puede observarse, el código anterior crea un objeto de la clase ",[427,804,805],{},"MyClass"," y lo escribe en un archivo llamado ",[427,808,809],{},"myObject.dat"," utilizando un ",[427,812,433],{},". Es importante manejar las excepciones de E\u002FS para garantizar que el programa no falle en caso de errores al escribir el archivo.",[815,816,817,818,821,822,824,825,828],"note",{},"La extensión del archivo (",[427,819,820],{},".dat"," en este caso) es solo una convención y no afecta el contenido del archivo, que es una secuencia de bytes que representa el objeto serializado. Se puede usar cualquier extensión, pero es común usar ",[427,823,820],{}," para archivos de datos binarios o cualquiera que decida el programador como convención para indicar que el archivo contiene objetos serializados. Por ejemplo en archivos de juegos podemos usar la extensión ",[427,826,827],{},".save"," para indicar que el archivo contiene datos de guardado del juego, aunque el contenido del archivo siga siendo una secuencia de bytes que representa objetos serializados.",[418,830,832],{"id":831},"leer-un-objeto-desde-un-archivo","Leer un Objeto desde un Archivo",[423,834,835,836,838],{},"Para leer un objeto desde un archivo, se puede usar la clase ",[427,837,429],{}," de la siguiente manera:",[466,840,843],{"className":468,"code":841,"filename":842,"language":471,"meta":472,"style":472},"import java.io.FileInputStream;\nimport java.io.IOException;\nimport java.io.ObjectInputStream;\n\npublic class ReadObjectFromFile {\n    void main() {\n        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(\"myObject.dat\"))) {\n            MyClass myObject = (MyClass) ois.readObject();\n            System.out.println(\"Objeto leído del archivo: \" + myObject.getName() + \", \" + myObject.getAge());\n        } catch (IOException | ClassNotFoundException e) {\n            e.printStackTrace();\n        }\n    }\n}\n","ReadObjectFromFile.java",[427,844,845,852,858,865,869,880,888,915,930,969,982,990,994,998],{"__ignoreMap":472},[476,846,847,849],{"class":478,"line":479},[476,848,483],{"class":482},[476,850,851],{"class":486}," java.io.FileInputStream;\n",[476,853,854,856],{"class":478,"line":490},[476,855,483],{"class":482},[476,857,640],{"class":486},[476,859,860,862],{"class":478,"line":497},[476,861,483],{"class":482},[476,863,864],{"class":486}," java.io.ObjectInputStream;\n",[476,866,867],{"class":478,"line":519},[476,868,494],{"emptyLinePlaceholder":493},[476,870,871,873,875,878],{"class":478,"line":528},[476,872,500],{"class":482},[476,874,503],{"class":482},[476,876,877],{"class":506}," ReadObjectFromFile",[476,879,516],{"class":486},[476,881,882,884,886],{"class":478,"line":539},[476,883,667],{"class":482},[476,885,670],{"class":506},[476,887,673],{"class":486},[476,889,890,892,895,897,899,902,904,906,909,911,913],{"class":478,"line":544},[476,891,705],{"class":482},[476,893,894],{"class":486}," (ObjectInputStream ois ",[476,896,581],{"class":482},[476,898,683],{"class":482},[476,900,901],{"class":506}," ObjectInputStream",[476,903,688],{"class":486},[476,905,720],{"class":482},[476,907,908],{"class":506}," FileInputStream",[476,910,688],{"class":486},[476,912,728],{"class":691},[476,914,731],{"class":486},[476,916,917,920,922,925,928],{"class":478,"line":571},[476,918,919],{"class":486},"            MyClass myObject ",[476,921,581],{"class":482},[476,923,924],{"class":486}," (MyClass) ois.",[476,926,927],{"class":506},"readObject",[476,929,784],{"class":486},[476,931,932,934,936,938,941,944,947,950,953,956,959,961,963,966],{"class":478,"line":587},[476,933,747],{"class":486},[476,935,750],{"class":506},[476,937,688],{"class":486},[476,939,940],{"class":691},"\"Objeto leído del archivo: \"",[476,942,943],{"class":482}," +",[476,945,946],{"class":486}," myObject.",[476,948,949],{"class":506},"getName",[476,951,952],{"class":486},"() ",[476,954,955],{"class":482},"+",[476,957,958],{"class":691}," \", \"",[476,960,943],{"class":482},[476,962,946],{"class":486},[476,964,965],{"class":506},"getAge",[476,967,968],{"class":486},"());\n",[476,970,971,973,975,978,980],{"class":478,"line":599},[476,972,762],{"class":486},[476,974,765],{"class":482},[476,976,977],{"class":486}," (IOException | ClassNotFoundException ",[476,979,771],{"class":555},[476,981,568],{"class":486},[476,983,984,986,988],{"class":478,"line":605},[476,985,778],{"class":486},[476,987,781],{"class":506},[476,989,784],{"class":486},[476,991,992],{"class":478,"line":610},[476,993,789],{"class":486},[476,995,996],{"class":478,"line":617},[476,997,602],{"class":486},[476,999,1000],{"class":478,"line":792},[476,1001,620],{"class":486},[423,1003,1004,1005,1007,1008,810,1010,1012,1013,1016],{},"En este ejemplo, se lee un objeto de la clase ",[427,1006,805],{}," desde el archivo ",[427,1009,809],{},[427,1011,429],{},". Es importante manejar tanto las excepciones de E\u002FS como la excepción ",[427,1014,1015],{},"ClassNotFoundException",", que puede ocurrir si la clase del objeto que se está leyendo no se encuentra en el classpath. Lo cual puede suceder si el archivo contiene un objeto de una clase que no está disponible en el entorno de ejecución, lo que hace que la deserialización falle. Por lo tanto, es crucial asegurarse de que todas las clases necesarias estén disponibles para evitar este tipo de errores al leer objetos desde archivos.",[1018,1019,1020],"warning",{},"Es importante tener en cuenta que la serialización y deserialización de objetos puede ser un proceso costoso en términos de rendimiento, especialmente si los objetos son grandes o complejos. Además, la serialización puede presentar problemas de seguridad si se deserializan objetos de fuentes no confiables, ya que puede permitir la ejecución de código malicioso. Por lo tanto, es recomendable utilizar la serialización con precaución y considerar alternativas como JSON o XML para la persistencia de datos cuando sea posible.",[418,1022,1024],{"id":1023},"conclusión","Conclusión",[423,1026,1027,1028,430,1030,1032,1033,1035],{},"En resumen, los archivos de tipo objeto en Java permiten almacenar y recuperar objetos completos utilizando las clases ",[427,1029,433],{},[427,1031,429],{},". Es fundamental que las clases de los objetos que se desean serializar implementen la interfaz ",[427,1034,447],{}," para garantizar que puedan ser serializados correctamente. Además, es importante manejar adecuadamente las excepciones relacionadas con la E\u002FS y la deserialización para evitar errores en el proceso. La serialización es una herramienta poderosa, pero debe usarse con precaución debido a sus implicaciones de rendimiento y seguridad.",[1037,1038,1039],"style",{},"html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}",{"title":472,"searchDepth":490,"depth":490,"links":1041},[1042,1043,1044,1045,1046],{"id":420,"depth":490,"text":421},{"id":437,"depth":490,"text":438},{"id":460,"depth":490,"text":461},{"id":831,"depth":490,"text":832},{"id":1023,"depth":490,"text":1024},"En este capítulo se explica cómo manejar archivos de tipo objeto en Java, utilizando las clases ObjectInputStream y ObjectOutputStream para leer y escribir objetos completos en archivos.","md",null,{"editButton":42},{"title":301,"description":1047},"GNSd9pDVr9NgkCIvuwDjlYtvd3QFBQh5j1yCxpebzKQ",[1054,1056],{"title":297,"path":298,"stem":299,"description":1055,"children":-1},"En este capítulo se explican los Streams de Entrada y Salida en Java, que son fundamentales para manejar la lectura y escritura de datos en archivos y otros medios.",{"title":305,"path":306,"stem":307,"description":1057,"children":-1},"En esta tercera parte de la serie sobre la UI para nuestro RPG, continuamos desarrollando la interfaz gráfica utilizando Java Swing, añadiendo más componentes y funcionalidades para mejorar la experiencia del usuario.",1779479575935]