1 00:00:00,500 --> 00:00:04,419 vale 2 00:00:04,419 --> 00:00:06,000 pues ahora 3 00:00:06,000 --> 00:00:08,099 para que nos sirve 4 00:00:08,099 --> 00:00:10,259 este object output string 5 00:00:10,259 --> 00:00:12,419 pues nos sirve para usar tan 6 00:00:12,419 --> 00:00:14,500 cómodamente como este método 7 00:00:14,500 --> 00:00:16,120 el write object 8 00:00:16,120 --> 00:00:17,559 y ya está 9 00:00:17,559 --> 00:00:20,059 y este método write object 10 00:00:20,059 --> 00:00:22,300 nos permite guardar 11 00:00:22,300 --> 00:00:24,260 un objeto de 12 00:00:24,260 --> 00:00:26,519 cualquier tipo en el 13 00:00:26,519 --> 00:00:28,620 fichero, vale, nosotros que queremos 14 00:00:28,620 --> 00:00:30,579 guardar, queremos guardar los 15 00:00:30,579 --> 00:00:31,460 alumnos, vale 16 00:00:31,460 --> 00:00:34,460 podríamos guardar el set 17 00:00:34,460 --> 00:00:35,259 y es un objeto 18 00:00:35,259 --> 00:00:38,399 con lo cual podríamos guardar directamente 19 00:00:38,399 --> 00:00:40,420 el set entero, write object alumnos 20 00:00:40,420 --> 00:00:40,700 vale 21 00:00:40,700 --> 00:00:43,759 pero bueno, vamos a hacer otra cosa 22 00:00:43,759 --> 00:00:46,560 vamos a guardar los alumnos 23 00:00:46,560 --> 00:00:48,240 cada uno, uno por uno, pues venga 24 00:00:48,240 --> 00:00:50,340 write object, vamos a hacernos aquí nosotros 25 00:00:50,340 --> 00:00:52,280 nuestro bucle 26 00:00:52,280 --> 00:00:56,320 para cada alumno 27 00:00:56,320 --> 00:00:57,539 A en alumnos 28 00:00:57,539 --> 00:01:02,399 ala, guárdate alumno 29 00:01:02,399 --> 00:01:03,600 Y ya está 30 00:01:03,600 --> 00:01:07,099 Y ahora ya aquí sí que queremos cerrar 31 00:01:07,099 --> 00:01:10,299 Este y este 32 00:01:10,299 --> 00:01:17,950 ¡Hala! Ya están los objetos guardados 33 00:01:17,950 --> 00:01:25,310 Aquí realmente 34 00:01:25,310 --> 00:01:27,049 No nos haría falta 35 00:01:27,049 --> 00:01:30,049 Haber hecho una referencia específica 36 00:01:30,049 --> 00:01:31,549 Podríamos haber metido esto 37 00:01:31,549 --> 00:01:33,310 Que es lo normal 38 00:01:33,310 --> 00:01:35,170 Meter esto directamente aquí 39 00:01:35,170 --> 00:01:37,609 ¿Vale? No hace falta que lo hagamos 40 00:01:37,609 --> 00:01:38,650 Con una referencia aparte 41 00:01:38,650 --> 00:01:40,370 Metemos esto directamente aquí 42 00:01:40,370 --> 00:01:42,030 Y ya está 43 00:01:42,030 --> 00:01:44,510 Vale, pero bueno 44 00:01:44,510 --> 00:01:46,409 Esto era para que quedara más claro 45 00:01:46,409 --> 00:01:58,719 Vale, explotete salpica 46 00:01:58,719 --> 00:02:05,269 Vale, entonces ya está 47 00:02:05,269 --> 00:02:07,390 Guardar datos, ya está, nos ha aparecido el error 48 00:02:07,390 --> 00:02:09,729 De oye, cuidado que puede salir una excepción 49 00:02:09,729 --> 00:02:11,310 ¿Qué haces? 50 00:02:11,469 --> 00:02:13,710 Venga, vamos a capturarla, no vamos a hacer un 51 00:02:13,710 --> 00:02:15,610 Throws, venga, vamos a hacer un try catch 52 00:02:15,610 --> 00:02:17,509 Y vamos a decir 53 00:02:17,509 --> 00:02:19,129 Aquí, pues 54 00:02:19,129 --> 00:02:25,560 No se guardaron los datos 55 00:02:25,560 --> 00:02:28,560 No se guardaron 56 00:02:28,560 --> 00:02:33,610 Los datos 57 00:02:33,610 --> 00:02:38,219 ¡Hala! Pues antes de seguir 58 00:02:38,219 --> 00:02:40,099 Vamos a probar 59 00:02:40,099 --> 00:02:40,879 Esta aplicación 60 00:02:40,879 --> 00:02:43,780 A ver si nos guarda los objetos en algún lado 61 00:02:43,780 --> 00:02:51,349 He escrito cada objeto 62 00:02:51,349 --> 00:02:51,849 Y ya está 63 00:02:51,849 --> 00:02:57,310 Vale, pues volvemos a ejecutar esto 64 00:02:57,310 --> 00:03:02,780 1, 2, 3, 4 65 00:03:02,780 --> 00:03:06,240 Esta de aquí 66 00:03:06,240 --> 00:03:08,139 5, 6, 7, 8 67 00:03:08,139 --> 00:03:10,479 Este de aquí 68 00:03:10,479 --> 00:03:13,900 Se va a matricular de programación 69 00:03:13,900 --> 00:03:15,620 El primero de ellos 70 00:03:15,620 --> 00:03:18,039 Y de nada más 71 00:03:18,039 --> 00:03:20,080 Y el segundo se va a matricular 72 00:03:20,080 --> 00:03:21,639 De bases de datos 73 00:03:21,639 --> 00:03:23,460 Y de nada más 74 00:03:23,460 --> 00:03:26,879 No se guardaron los datos 75 00:03:26,879 --> 00:03:29,400 No se guardaron 76 00:03:29,400 --> 00:03:31,919 No se ha salido una excepción 77 00:03:31,919 --> 00:03:33,180 ¿Vale? 78 00:03:33,740 --> 00:03:34,360 Que dice 79 00:03:34,360 --> 00:03:35,139 Uy 80 00:03:35,139 --> 00:03:38,580 error de no serializable 81 00:03:38,580 --> 00:03:40,580 oye, alumno 82 00:03:40,580 --> 00:03:41,879 no es serializable 83 00:03:41,879 --> 00:03:44,520 ay, que mal rollo nos da 84 00:03:44,520 --> 00:03:46,439 no pasa nada, claro, alumno no es 85 00:03:46,439 --> 00:03:47,219 serializable 86 00:03:47,219 --> 00:03:50,340 porque yo no le he dado el rol de ser 87 00:03:50,340 --> 00:03:51,120 serializable 88 00:03:51,120 --> 00:03:57,990 ser serializable es que tú puedas 89 00:03:57,990 --> 00:03:59,930 ser cogido por alguien 90 00:03:59,930 --> 00:04:02,330 en este caso el object output stream 91 00:04:02,330 --> 00:04:04,370 que es capaz de cogerte 92 00:04:04,370 --> 00:04:06,310 y ponerte 93 00:04:06,310 --> 00:04:07,810 en filita todos tus 94 00:04:07,810 --> 00:04:10,590 bits, que en este caso serán los de 95 00:04:10,590 --> 00:04:12,610 name, nombre y matrícula, ponértelos 96 00:04:12,610 --> 00:04:14,669 en texto, no, aquí el texto 97 00:04:14,669 --> 00:04:16,529 no existe, ponértelos todos 98 00:04:16,529 --> 00:04:18,490 los bits que codifican este string 99 00:04:18,490 --> 00:04:20,149 este nombre y esta matrícula 100 00:04:20,149 --> 00:04:22,670 pues ponerlos todos en filita y sacarlos todos en filita 101 00:04:22,670 --> 00:04:24,350 en fichero, entonces 102 00:04:24,350 --> 00:04:26,389 para que object output stream 103 00:04:26,389 --> 00:04:28,750 pueda hacer eso 104 00:04:28,750 --> 00:04:30,529 tú tienes que 105 00:04:30,529 --> 00:04:31,550 darle a este 106 00:04:31,550 --> 00:04:34,649 el role, o tienes 107 00:04:34,649 --> 00:04:37,050 que marcarlo como sujeto 108 00:04:37,050 --> 00:04:39,189 poder ser serializado. Marcarlo de alguna 109 00:04:39,189 --> 00:04:40,810 manera, darle ese rol. Porque 110 00:04:40,810 --> 00:04:43,129 Object to Put String lo primero que hace es, lo que tú me has 111 00:04:43,129 --> 00:04:45,149 dado, ¿tengo 112 00:04:45,149 --> 00:04:47,069 yo permiso de serializarlo? ¿Tengo 113 00:04:47,069 --> 00:04:48,889 yo permiso de hacerle ese pastiche 114 00:04:48,889 --> 00:04:49,389 extraño? 115 00:04:51,209 --> 00:04:52,949 ¿Qué significa tener permiso 116 00:04:52,949 --> 00:04:54,490 en Java? Pues tener ese rol. 117 00:04:55,370 --> 00:04:57,089 ¿Cómo se le da un rol en Java 118 00:04:57,089 --> 00:04:58,990 a alguien? Implementando la 119 00:04:58,990 --> 00:05:00,149 interfaz correspondiente. 120 00:05:01,209 --> 00:05:02,990 Todo esto es diseño, porque está diseñado 121 00:05:02,990 --> 00:05:05,069 así. Las interfaces significan 122 00:05:05,069 --> 00:05:06,829 papeles que tú puedes 123 00:05:06,829 --> 00:05:08,910 adoptar, cuando tú puedes adoptar 124 00:05:08,910 --> 00:05:10,629 un papel se pueden hacer cosas contigo 125 00:05:10,629 --> 00:05:12,930 te pueden hacer cosas, oye pues yo quiero 126 00:05:12,930 --> 00:05:14,449 resulta que alumno 127 00:05:14,449 --> 00:05:16,870 yo quiero que ahora vaya todo en filita 128 00:05:16,870 --> 00:05:18,550 con todos sus bits hechos ahí 129 00:05:18,550 --> 00:05:20,670 un desastre, quiero que vaya un fichero 130 00:05:20,670 --> 00:05:22,930 pues si quiero que con los objetos 131 00:05:22,930 --> 00:05:24,490 alumnos se pueda hacer eso 132 00:05:24,490 --> 00:05:26,829 tengo que darle a este, ese papel 133 00:05:26,829 --> 00:05:28,730 y como le doy a ese 134 00:05:28,730 --> 00:05:30,610 esa capacidad o ese papel 135 00:05:30,610 --> 00:05:32,610 implementando una interfaz 136 00:05:32,610 --> 00:05:34,370 y como se llama esa interfaz 137 00:05:34,370 --> 00:05:36,670 pues si no lo sé, casi que este me lo 138 00:05:36,670 --> 00:05:53,470 acaba de decir y si no lo busco. Serializable. Implementar serializable es una interfaz sin 139 00:05:53,470 --> 00:05:58,009 métodos en realidad. Por eso implementando serializable no me dice lo que me dice siempre 140 00:05:58,009 --> 00:06:03,569 cuando implemento una interfaz que es pues tienes que implementar los métodos. No me lo dice porque 141 00:06:03,569 --> 00:06:09,550 serializable no tiene métodos. Y diréis ¿y para qué vale? Es una marca. Es una marca para que el 142 00:06:09,550 --> 00:06:12,149 Oye, da un put string 143 00:06:12,149 --> 00:06:14,329 Diga, ah, vale, puedo actuar con este 144 00:06:14,329 --> 00:06:15,209 Me han dado permiso 145 00:06:15,209 --> 00:06:17,209 Es todo diseño, en realidad 146 00:06:17,209 --> 00:06:21,860 Bueno, pues ya lo he marcado como serializable 147 00:06:21,860 --> 00:06:23,920 Vamos a ver si ya no se queja 148 00:06:23,920 --> 00:06:26,120 Se queja 149 00:06:26,120 --> 00:06:27,139 ¿Y qué dice ahora? 150 00:06:29,399 --> 00:06:31,300 ¿Seguro que dice lo mismo? Vamos a ver si dice lo mismo 151 00:06:31,300 --> 00:06:32,759 A ver, la gestión es la misma 152 00:06:32,759 --> 00:06:41,970 Vale, 5, 6, 7, 8 153 00:06:41,970 --> 00:06:44,329 Nombre Luis 154 00:06:44,329 --> 00:06:46,050 Le matriculamos 155 00:06:46,050 --> 00:06:47,089 De prog 156 00:06:47,089 --> 00:06:50,129 y le matriculamos de bases de datos. 157 00:06:51,269 --> 00:06:52,850 No se pudieran guardar datos. 158 00:06:53,810 --> 00:06:56,430 No es lo mismo porque antes me decía objetos alumno 159 00:06:56,430 --> 00:06:58,550 y ahora me dice objetos matrícula. 160 00:07:00,670 --> 00:07:03,230 Claro, porque alumno tiene dentro matrícula. 161 00:07:03,230 --> 00:07:07,589 Entonces, serializar alumno implica serializar lo que tiene dentro. 162 00:07:08,089 --> 00:07:11,089 Tiene dentro string, pero es que string ya es serializable. 163 00:07:11,949 --> 00:07:13,850 String no es una clase que hemos hecho nosotros. 164 00:07:14,670 --> 00:07:16,410 Si nosotros abrimos la clase string, 165 00:07:16,410 --> 00:07:18,589 fijaos, ya implementa serializable 166 00:07:18,589 --> 00:07:19,970 ya, ya 167 00:07:19,970 --> 00:07:22,470 si implementa serializable, implementa 168 00:07:22,470 --> 00:07:23,790 comparable, etc 169 00:07:23,790 --> 00:07:26,470 pero matricular la acabo de hacer yo 170 00:07:26,470 --> 00:07:28,629 entonces pues a matricular también 171 00:07:28,629 --> 00:07:31,350 es que 172 00:07:31,350 --> 00:07:34,350 la secretaria vaya tan por delante me pone 173 00:07:34,350 --> 00:07:34,910 nerviosa 174 00:07:34,910 --> 00:07:38,230 pues ya me va diciendo, pues si funciona 175 00:07:38,230 --> 00:07:40,410 pues no funciona, pues no se que, pues me estreso mucho 176 00:07:44,410 --> 00:07:44,930 si 177 00:07:44,930 --> 00:07:45,449 serializable 178 00:07:45,449 --> 00:07:48,689 Vale, entonces 179 00:07:48,689 --> 00:07:51,029 Serializable 180 00:07:51,029 --> 00:07:51,949 Que es de Havai 181 00:07:51,949 --> 00:08:01,730 Vale, siguiente intento 182 00:08:01,730 --> 00:08:02,730 Vamos a hacerlo cortito 183 00:08:02,730 --> 00:08:04,990 NIF1, nombre 1 184 00:08:04,990 --> 00:08:07,990 NIF2, nombre 2 185 00:08:07,990 --> 00:08:10,269 Módulo P1 186 00:08:10,269 --> 00:08:12,410 Se acabó 187 00:08:12,410 --> 00:08:13,990 Módulo P2 188 00:08:13,990 --> 00:08:15,389 Se acabó 189 00:08:15,389 --> 00:08:17,529 Vale 190 00:08:17,529 --> 00:08:20,949 ¿Ha creado el archivo de objetos? 191 00:08:20,949 --> 00:08:22,490 Pues vamos a refrescar 192 00:08:22,490 --> 00:08:24,310 Refresh 193 00:08:24,310 --> 00:08:25,750 Pues sí 194 00:08:25,750 --> 00:08:28,490 En datos está alumnos.dat 195 00:08:28,490 --> 00:08:30,750 Lógicamente uno no va y lo abre 196 00:08:30,750 --> 00:08:32,929 Lógicamente, ¿por qué? 197 00:08:33,929 --> 00:08:34,409 Porque 198 00:08:34,409 --> 00:08:36,529 Esto es un editor de texto 199 00:08:36,529 --> 00:08:38,909 Con lo cual solo es capaz de visualizar 200 00:08:38,909 --> 00:08:41,149 Archivos de texto, ¿qué hace un editor de texto? 201 00:08:41,370 --> 00:08:42,429 Uy, que se ha abierto ahí 202 00:08:42,429 --> 00:08:45,940 ¿Qué hace un editor de texto? 203 00:08:46,299 --> 00:08:48,600 Pues te coge tu fichero, que son un montón de bits 204 00:08:48,600 --> 00:08:50,580 Los va cogiendo de 8 en 8 205 00:08:50,580 --> 00:08:52,100 Se va a la tabla ASCII 206 00:08:52,100 --> 00:08:54,120 mira a ver esos 8 bits que codifican 207 00:08:54,120 --> 00:08:55,039 y te planta el carácter 208 00:08:55,039 --> 00:08:58,120 si el fichero es de texto, eso tendrá algún sentido 209 00:08:58,120 --> 00:09:00,220 pero si el fichero no es de texto 210 00:09:00,220 --> 00:09:01,320 eso no tiene ningún sentido 211 00:09:01,320 --> 00:09:03,379 que es como ocurre aquí 212 00:09:03,379 --> 00:09:06,259 el archivo es una serialización en bits 213 00:09:06,259 --> 00:09:07,799 de ese int, de ese string 214 00:09:07,799 --> 00:09:08,740 de todas esas cosas 215 00:09:08,740 --> 00:09:11,659 y eso no codifica caracteres ASCII 216 00:09:11,659 --> 00:09:13,840 con lo cual el editor de texto los ha cogido 217 00:09:13,840 --> 00:09:15,980 de 8 en 8, los ha plantado 218 00:09:15,980 --> 00:09:18,059 y esto no tiene ningún sentido 219 00:09:18,059 --> 00:09:20,519 algunas cosas si son caracteres ASCII 220 00:09:20,519 --> 00:09:21,179 pero otras no 221 00:09:21,179 --> 00:09:26,059 entonces bueno, el archivo lo ha creado 222 00:09:26,059 --> 00:09:27,539 los objetos están 223 00:09:27,539 --> 00:09:29,159 pero ¿para qué sirven? 224 00:09:29,720 --> 00:09:32,100 sirven para que otra aplicación 225 00:09:32,100 --> 00:09:34,139 ahora ya los lea 226 00:09:34,139 --> 00:09:36,059 o mi propia aplicación al principio 227 00:09:36,059 --> 00:09:37,899 al arrancar, los lea 228 00:09:37,899 --> 00:09:39,480 entonces 229 00:09:39,480 --> 00:09:42,100 ¿esta aplicación ahora cómo la 230 00:09:42,100 --> 00:09:44,019 podríamos modificar para que tenga algún 231 00:09:44,019 --> 00:09:46,059 sentido? pues que cuando la 232 00:09:46,059 --> 00:09:48,059 aplicación arranca y el de 233 00:09:48,059 --> 00:09:50,039 secretaría viene por 234 00:09:50,039 --> 00:09:52,139 la mañana y va a matricular alumnos 235 00:09:52,139 --> 00:09:56,539 nuevos o hacer lo que sea, pues si arranca su ordenador 236 00:09:56,539 --> 00:10:00,080 y su aplicación, lógicamente quiere que la aplicación tenga 237 00:10:00,080 --> 00:10:04,019 los alumnos del día anterior, que está en el fichero. Pues entonces 238 00:10:04,019 --> 00:10:07,919 lo primero que tendrá que hacer este main es un 239 00:10:07,919 --> 00:10:13,960 recuperar alumnos para leer del archivo 240 00:10:13,960 --> 00:10:17,600 si existiera los alumnos que haya y ya 241 00:10:17,600 --> 00:10:20,460 a partir de ahí, pues añadir alumnos o lo que toque hacer. 242 00:10:20,460 --> 00:10:27,049 vale, pues vamos a hacer el recuperar 243 00:10:27,049 --> 00:10:27,629 alumnos 244 00:10:27,629 --> 00:10:35,320 bueno, recuperar alumnos 245 00:10:35,320 --> 00:10:37,399 tiene sentido si el fichero existe 246 00:10:37,399 --> 00:10:39,120 entonces vamos a hacerle el file 247 00:10:39,120 --> 00:10:46,320 primero, se llama 248 00:10:46,320 --> 00:10:52,269 fichero, ¿no? y ahora 249 00:10:52,269 --> 00:10:54,269 ya sí, si el fichero no existe no hagas 250 00:10:54,269 --> 00:11:03,120 nada más, si el fichero no existe 251 00:11:03,120 --> 00:11:04,639 fuera, no hay nada que recuperar 252 00:11:04,639 --> 00:11:07,179 pero si el fichero existe 253 00:11:07,179 --> 00:11:09,039 pues ahora ya 254 00:11:09,039 --> 00:11:11,019 sí, tendremos que abrirlo para 255 00:11:11,019 --> 00:11:12,700 leer, pero para leer objetos 256 00:11:12,700 --> 00:11:15,120 con lo cual será el object 257 00:11:15,120 --> 00:11:19,100 input string, si el object output string era para escribir 258 00:11:19,100 --> 00:11:23,740 el object input string es para leer 259 00:11:23,740 --> 00:11:37,570 de nuevo el object input string no se asocia 260 00:11:37,570 --> 00:11:41,750 directamente al nombre del archivo o al objeto file, se tiene que 261 00:11:41,750 --> 00:11:44,970 asociar a un flujo de bytes básico de entrada 262 00:11:44,970 --> 00:11:49,590 si el object output se asociaba a un file output string 263 00:11:49,590 --> 00:11:52,429 que es el flujo básico de salida de bytes 264 00:11:52,429 --> 00:11:54,889 Pues el object input se asocia 265 00:11:54,889 --> 00:11:56,470 Al file input string 266 00:11:56,470 --> 00:11:58,710 Pues vamos a ponérselo aquí directamente 267 00:11:58,710 --> 00:12:00,629 Y así ni le creamos 268 00:12:00,629 --> 00:12:03,149 Variable aparte 269 00:12:03,149 --> 00:12:05,330 File input string 270 00:12:05,330 --> 00:12:07,129 A ver que lo paso aquí abajo 271 00:12:07,129 --> 00:12:13,370 Fichero 272 00:12:13,370 --> 00:12:20,700 Vale, el object input string se asocia 273 00:12:20,700 --> 00:12:22,620 A un flujo de bytes básico 274 00:12:22,620 --> 00:12:25,039 Y excepción 275 00:12:25,039 --> 00:12:26,759 Pues lo mismo, la propago 276 00:12:26,759 --> 00:12:28,320 Y que ya el main 277 00:12:28,320 --> 00:12:30,799 Decida que hace si no se pudieron 278 00:12:30,799 --> 00:12:35,419 recuperar. Ahí se queda 279 00:12:35,419 --> 00:12:40,370 propagada. Y ahora, 280 00:12:40,809 --> 00:12:42,570 bucle de lectura. No sé cuántos 281 00:12:42,570 --> 00:12:44,610 objetos alumno hay. 282 00:12:44,870 --> 00:12:46,830 No lo sé. Bucle de lectura. 283 00:12:48,470 --> 00:12:48,929 Pues 284 00:12:48,929 --> 00:12:50,129 aquí hay alguna marca 285 00:12:50,129 --> 00:12:52,669 cómo se hará la lectura. La lectura está claro 286 00:12:52,669 --> 00:12:54,389 que se hará con algún read. Pues 287 00:12:54,389 --> 00:12:56,710 justo, fíjate que tenemos 288 00:12:56,710 --> 00:12:58,169 un read object. Va a ser que es ese. 289 00:13:02,559 --> 00:13:03,980 Entonces, nosotros 290 00:13:03,980 --> 00:13:05,759 queremos hacer varias veces lo de 291 00:13:05,759 --> 00:13:07,960 amiset de alumnos 292 00:13:07,960 --> 00:13:11,960 alumnos.add 293 00:13:11,960 --> 00:13:16,460 el objeto este que estamos leyendo 294 00:13:16,460 --> 00:13:20,419 o sea 295 00:13:20,419 --> 00:13:20,980 esto 296 00:13:20,980 --> 00:13:23,899 ahora corregimos este error de compilación 297 00:13:23,899 --> 00:13:26,179 es leer objeto 298 00:13:26,179 --> 00:13:28,620 añadir al set de mi aplicación 299 00:13:28,620 --> 00:13:30,759 leer objeto, añadir al set 300 00:13:30,759 --> 00:13:32,419 esto lo querré hacer yo 301 00:13:32,419 --> 00:13:34,740 varias, un montón de veces 302 00:13:34,740 --> 00:13:35,539 lógicamente 303 00:13:35,539 --> 00:13:38,899 lo querré yo hacer un montón de veces 304 00:13:38,899 --> 00:13:48,879 Sí, sí, sí, sí, no ves que está aquí en rojito 305 00:13:48,879 --> 00:13:50,419 Sí, pero lo he dejado aparcado ahora 306 00:13:50,419 --> 00:13:51,840 Lo he dejado eso aparcado por ahora 307 00:13:51,840 --> 00:13:54,299 Lo que me interesa es la estructura del guay 308 00:13:54,299 --> 00:13:55,720 Ahora arreglamos este error 309 00:13:55,720 --> 00:13:57,820 Vale, entonces lo que yo querría hacer 310 00:13:57,820 --> 00:14:00,259 Un montón de veces es 311 00:14:00,259 --> 00:14:02,259 Leer objeto, añadir alumnos 312 00:14:02,259 --> 00:14:03,899 Leer objeto, añadir alumnos 313 00:14:03,899 --> 00:14:06,600 Leer objeto, añadir alumnos 314 00:14:06,600 --> 00:14:07,379 Mientras que 315 00:14:07,379 --> 00:14:09,620 Mientras no haya llegado al final 316 00:14:09,620 --> 00:14:12,360 Aquí hay alguna marca de final en el read object 317 00:14:12,360 --> 00:14:13,879 en realidad no hay ninguna marca 318 00:14:13,879 --> 00:14:15,620 pero sí que va a ocurrir 319 00:14:15,620 --> 00:14:18,220 que si el read object se intenta hacer 320 00:14:18,220 --> 00:14:20,600 y yo ya estoy fuera, porque ya me he salido 321 00:14:20,600 --> 00:14:21,960 me va a salir un 322 00:14:21,960 --> 00:14:23,240 en odd file exception 323 00:14:23,240 --> 00:14:26,580 entonces vía excepción podemos decidir 324 00:14:26,580 --> 00:14:28,100 cuando hemos acabado y cuando no 325 00:14:28,100 --> 00:14:29,700 por ejemplo así 326 00:14:29,700 --> 00:14:32,379 boolean fin 327 00:14:32,379 --> 00:14:34,740 inicialmente es falso, yo no he acabado 328 00:14:34,740 --> 00:14:36,039 y ahora ya 329 00:14:36,039 --> 00:14:38,539 mientras yo no haya 330 00:14:38,539 --> 00:14:39,159 acabado 331 00:14:39,159 --> 00:14:41,899 mientras yo no haya acabado 332 00:14:41,899 --> 00:14:44,679 Intenta hacer esto 333 00:14:44,679 --> 00:14:48,419 Intenta hacer esto 334 00:14:48,419 --> 00:14:50,440 Pero si te sale 335 00:14:50,440 --> 00:14:52,019 La excepción 336 00:14:52,019 --> 00:14:53,139 En odd file 337 00:14:53,139 --> 00:14:54,559 Exception 338 00:14:54,559 --> 00:14:57,299 Si te sale esta excepción 339 00:14:57,299 --> 00:14:58,940 Entonces 340 00:14:58,940 --> 00:15:04,059 Yo aviso de que hemos llegado al final 341 00:15:04,059 --> 00:15:07,440 ¿Vale? 342 00:15:08,500 --> 00:15:09,940 Esta es la maquinaria más bonita 343 00:15:09,940 --> 00:15:10,840 ¿Qué pasa? ¿No te gusta o qué? 344 00:15:12,960 --> 00:15:13,759 Vamos a ver 345 00:15:13,759 --> 00:15:21,870 Vale, entonces 346 00:15:21,870 --> 00:15:24,889 este bucle es el más general que hay 347 00:15:24,889 --> 00:15:26,169 lo podríamos usar 348 00:15:26,169 --> 00:15:28,970 en más clases de lectura 349 00:15:28,970 --> 00:15:29,370 y todo 350 00:15:29,370 --> 00:15:32,629 entonces está todo el rato, ahora arreglamos este rojo 351 00:15:32,629 --> 00:15:34,129 lee 352 00:15:34,129 --> 00:15:36,230 y añade a la colección 353 00:15:36,230 --> 00:15:37,710 lee y añade a la colección 354 00:15:37,710 --> 00:15:38,570 si cuando 355 00:15:38,570 --> 00:15:42,029 hagamos una lectura resulta 356 00:15:42,029 --> 00:15:43,730 que esa lectura es imposible 357 00:15:43,730 --> 00:15:44,789 porque estamos al final 358 00:15:44,789 --> 00:15:46,909 irá aquí 359 00:15:46,909 --> 00:15:49,149 pondrá fin igual a true 360 00:15:49,149 --> 00:15:51,850 cuando el while vuelva ya está, ya no la más 361 00:15:51,850 --> 00:15:54,429 Entonces nos quedará cerrar el flujo 362 00:15:54,429 --> 00:15:54,909 Y fuera 363 00:15:54,909 --> 00:16:02,289 End of file 364 00:16:02,289 --> 00:16:06,389 Ahora, este rojo de aquí 365 00:16:06,389 --> 00:16:06,970 ¿Por qué es? 366 00:16:07,470 --> 00:16:10,289 Porque el read object está declarado 367 00:16:10,289 --> 00:16:12,429 Está declarado para que te devuelva 368 00:16:12,429 --> 00:16:13,509 Un object genérico 369 00:16:13,509 --> 00:16:15,429 Porque claro, el método read object 370 00:16:15,429 --> 00:16:17,809 No se puede declarar 371 00:16:17,809 --> 00:16:19,809 Un read object para cada clase 372 00:16:19,809 --> 00:16:22,509 entonces si nos metemos en el método readObject 373 00:16:22,509 --> 00:16:24,870 dentro de object.putString vemos que en su declaración 374 00:16:24,870 --> 00:16:25,610 pone object 375 00:16:25,610 --> 00:16:28,690 lógicamente, porque es un método que lee un objeto 376 00:16:28,690 --> 00:16:30,389 no sabemos cuál, cada vez el que toque 377 00:16:30,389 --> 00:16:32,570 entonces el compilador 378 00:16:32,570 --> 00:16:34,269 te dice, perdona 379 00:16:34,269 --> 00:16:36,730 esto es un set de alumnos, yo no puedo hacer 380 00:16:36,730 --> 00:16:38,490 un add de algo que esté 381 00:16:38,490 --> 00:16:40,009 declarado como object 382 00:16:40,009 --> 00:16:42,690 yo solamente puedo hacer un add de algo 383 00:16:42,690 --> 00:16:44,169 que esté como alumno 384 00:16:44,169 --> 00:16:45,789 bueno, pues le hagamos un casting 385 00:16:45,789 --> 00:16:48,990 un casting siempre es una cosa muy bestia 386 00:16:48,990 --> 00:16:50,990 Pero en este caso se supone que 387 00:16:50,990 --> 00:16:52,850 Controlamos que este fichero 388 00:16:52,850 --> 00:16:55,269 Se ha hecho creando alumnos 389 00:16:55,269 --> 00:16:56,909 O sea, insertando alumnos 390 00:16:56,909 --> 00:16:58,990 Con lo cual ese casting va a funcionar 391 00:16:58,990 --> 00:17:01,149 Entonces es que no hay tu tía 392 00:17:01,149 --> 00:17:03,389 Tengo que hacer el casting, es que aquí no hay otra solución 393 00:17:03,389 --> 00:17:10,119 Y esto ya se queda arreglado 394 00:17:10,119 --> 00:17:12,240 Y el cierre este de aquí 395 00:17:12,240 --> 00:17:12,319 Y 396 00:17:12,319 --> 00:17:17,180 Es que sois, perdón 397 00:17:17,180 --> 00:17:18,680 Hoy sois 398 00:17:18,680 --> 00:17:22,279 Vale 399 00:17:22,279 --> 00:17:25,220 Y ahora el read object ya sí que me dice 400 00:17:25,220 --> 00:17:26,839 Cuidado, te puedo dar una excepción 401 00:17:26,839 --> 00:17:28,599 Pues venga, a propagarla 402 00:17:28,599 --> 00:17:31,279 Ya tenemos ahí 403 00:17:31,279 --> 00:17:32,559 200.000 excepciones 404 00:17:32,559 --> 00:17:44,059 Vale, pues el método 405 00:17:44,059 --> 00:17:45,559 De lectura de objetos del fichero 406 00:17:45,559 --> 00:17:46,539 Estaría 407 00:17:46,539 --> 00:17:51,099 Y sigo teniendo una cosa roja 408 00:17:51,099 --> 00:17:53,579 Ah, claro, aquí, que al hacer el throws 409 00:17:53,579 --> 00:17:55,500 Me dice, oye tú, recuperar alumnos 410 00:17:55,500 --> 00:17:58,059 Pues venga, vamos a hacerle un try 411 00:17:58,059 --> 00:18:01,819 Entonces, este es el try 412 00:18:01,819 --> 00:18:03,640 Que me permite 413 00:18:03,640 --> 00:18:05,299 Capturar cada excepción 414 00:18:05,299 --> 00:18:07,519 por separado y para excepción dar un mensaje 415 00:18:07,519 --> 00:18:08,160 distinto 416 00:18:08,160 --> 00:18:11,339 pero a ver si soy vago 417 00:18:11,339 --> 00:18:14,890 puedo hacer este sintaxis 418 00:18:14,890 --> 00:18:18,769 que esta sintaxis en el mismo 419 00:18:18,769 --> 00:18:20,549 catch me captura 420 00:18:20,549 --> 00:18:21,650 todas 421 00:18:21,650 --> 00:18:24,470 entonces aquí no podría yo distinguir 422 00:18:24,470 --> 00:18:26,349 mensajitos, si es esta un mensaje 423 00:18:26,349 --> 00:18:27,190 si es esta otra 424 00:18:27,190 --> 00:18:30,750 pero bueno, en mi caso no lo voy a distinguir 425 00:18:30,750 --> 00:18:32,089 voy a poner pues 426 00:18:32,089 --> 00:18:34,750 error al recuperar 427 00:18:34,750 --> 00:18:37,089 el alumnos 428 00:18:37,089 --> 00:18:38,950 ¿por qué ha sido? me da igual 429 00:18:38,950 --> 00:18:41,069 ha habido un error al recuperar alumnos 430 00:18:41,069 --> 00:18:47,660 ya está, vale 431 00:18:47,660 --> 00:18:50,099 pues yo tengo un fichero ya de antes previo 432 00:18:50,099 --> 00:18:51,319 el alumnos.dat 433 00:18:51,319 --> 00:18:54,259 voy a ver si ahora esta aplicación 434 00:18:54,259 --> 00:18:55,900 me los recupera correctamente 435 00:18:55,900 --> 00:18:57,660 y los dos que me añada después 436 00:18:57,660 --> 00:18:59,640 me los añade sobre el otro 437 00:18:59,640 --> 00:19:06,000 vamos a ejecutarlo 438 00:19:06,000 --> 00:19:09,910 venga, vamos a añadir otro 439 00:19:09,910 --> 00:19:14,200 este que se llama 440 00:19:14,200 --> 00:19:16,500 carlos 441 00:19:16,500 --> 00:19:18,259 y ahora vamos a añadir al otro 442 00:19:18,259 --> 00:19:20,240 esta 443 00:19:20,240 --> 00:19:21,880 que se llama Luisa 444 00:19:21,880 --> 00:19:24,119 vamos a matricular al primero 445 00:19:24,119 --> 00:19:25,240 de sistemas 446 00:19:25,240 --> 00:19:28,279 que será el tercero, porque hemos leído 447 00:19:28,279 --> 00:19:28,980 dos previamente 448 00:19:28,980 --> 00:19:32,319 y al segundo nuevo que he metido 449 00:19:32,319 --> 00:19:33,380 lo vamos a matricular 450 00:19:33,380 --> 00:19:36,420 de entornos 451 00:19:36,420 --> 00:19:38,400 entornis me ha salido 452 00:19:38,400 --> 00:19:39,680 da igual, fin 453 00:19:39,680 --> 00:19:48,759 módulo 1, módulo 2, fin 454 00:19:48,759 --> 00:19:50,819 porque me sigue 455 00:19:50,819 --> 00:19:52,319 pidiendo más, ya tendría que haber acabado 456 00:19:52,319 --> 00:19:54,740 Pues fin 457 00:19:54,740 --> 00:19:58,640 Ah, porque me está pidiendo matrícula 458 00:19:58,640 --> 00:20:00,259 Para los otros dos que había, claro 459 00:20:00,259 --> 00:20:01,940 O sea, ya puedo 460 00:20:01,940 --> 00:20:04,920 ¿Vale? Es decir, está claro que me ha funcionado 461 00:20:04,920 --> 00:20:05,200 Bien 462 00:20:05,200 --> 00:20:06,880 Porque 463 00:20:06,880 --> 00:20:10,200 Me lo está pidiendo para los cuatro 464 00:20:10,200 --> 00:20:12,539 Vale, pues venga 465 00:20:12,539 --> 00:20:14,579 A este le voy a matricular de cualquier cosa 466 00:20:14,579 --> 00:20:16,579 De sistemas también, fin 467 00:20:16,579 --> 00:20:17,680 Y al cuarto alumno 468 00:20:17,680 --> 00:20:21,019 Le voy a matricular de cualquier cosa 469 00:20:21,019 --> 00:20:21,460 Fin 470 00:20:21,460 --> 00:20:23,940 y aquí están mis cuatro alumnos 471 00:20:23,940 --> 00:20:26,140 los dos que estaban en el archivo 472 00:20:26,140 --> 00:20:28,220 que los ha recuperado 473 00:20:28,220 --> 00:20:29,079 correctamente 474 00:20:29,079 --> 00:20:31,480 les ha cambiado la matrícula porque es que 475 00:20:31,480 --> 00:20:34,160 como me piden matricular 476 00:20:34,160 --> 00:20:35,559 a todos, pues otra vez 477 00:20:35,559 --> 00:20:37,759 me han pedido matricular a los dos primeros 478 00:20:37,759 --> 00:20:39,960 pero bueno, los ha leído del fichero 479 00:20:39,960 --> 00:20:40,740 perfectamente 480 00:20:40,740 --> 00:20:42,920 y estos son los dos nuevos que ha añadido 481 00:20:42,920 --> 00:20:47,319 luego esto de leer 482 00:20:47,319 --> 00:20:49,539 los objetos que había, los ha leído 483 00:20:49,539 --> 00:21:02,299 ¿vale? vamos a hacer 484 00:21:02,299 --> 00:21:03,819 una última prueba 485 00:21:03,819 --> 00:21:09,000 porque a veces una prueba puede ser de casualidad 486 00:21:09,000 --> 00:21:10,940 nombre 487 00:21:10,940 --> 00:21:12,500 nif 488 00:21:12,500 --> 00:21:15,779 nombre 489 00:21:15,779 --> 00:21:19,119 lo que se hace es que debe tener que matricular a 6 alumnos 490 00:21:19,119 --> 00:21:19,660 pero bueno 491 00:21:19,660 --> 00:21:22,680 el módulo 1, 1, fin 492 00:21:22,680 --> 00:21:24,299 módulo 1 493 00:21:24,299 --> 00:21:26,740 1, fin 494 00:21:26,740 --> 00:21:29,240 1, fin 495 00:21:29,240 --> 00:21:32,099 1, fin 496 00:21:32,099 --> 00:21:34,500 a este no le matriculo de nada 497 00:21:34,500 --> 00:21:36,059 y a este no le matriculo de nada 498 00:21:36,059 --> 00:21:38,059 y aquí tengo mis seis alumnos 499 00:21:38,059 --> 00:21:38,740 ¿vale? 500 00:21:39,759 --> 00:21:41,440 los cuatro que tenía 501 00:21:41,440 --> 00:21:44,559 de las dos ejecuciones anteriores 502 00:21:44,559 --> 00:21:46,279 con las cosas que les he 503 00:21:46,279 --> 00:21:47,299 matriculado a lo tonto 504 00:21:47,299 --> 00:21:49,200 y los dos nuevos 505 00:21:49,200 --> 00:22:00,289 ¿vale? aquí lo único 506 00:22:00,289 --> 00:22:01,789 es que estoy trabajando 507 00:22:01,789 --> 00:22:04,150 todo el rato con todos los alumnos en memoria 508 00:22:04,150 --> 00:22:05,769 lo primero que hago es 509 00:22:05,769 --> 00:22:07,670 vuelco la base de datos 510 00:22:07,670 --> 00:22:09,869 digo base de datos entre comillas porque es un archivo 511 00:22:09,869 --> 00:22:10,730 no es una base de datos 512 00:22:10,730 --> 00:22:13,670 pero para mí está siendo como una especie de simulación 513 00:22:13,670 --> 00:22:15,210 de base de datos, mi archivo 514 00:22:15,210 --> 00:22:17,369 entonces vuelco toda mi 515 00:22:17,369 --> 00:22:19,490 pseudo base de datos 516 00:22:19,490 --> 00:22:21,329 la vuelco toda en un set 517 00:22:21,329 --> 00:22:23,529 con el set ya hago lo que yo quiera 518 00:22:23,529 --> 00:22:25,730 eso ya es Java, matriculo 519 00:22:25,730 --> 00:22:27,910 desmatriculo, añado, quito, lo que yo quiera 520 00:22:27,910 --> 00:22:29,549 y antes de irme cojo 521 00:22:29,549 --> 00:22:31,829 todo mi set entero y se va para allá 522 00:22:31,829 --> 00:22:33,769 eso es lo más cómodo 523 00:22:33,769 --> 00:22:34,690 lo más rápido 524 00:22:34,690 --> 00:22:37,529 porque todas mis operaciones con los alumnos 525 00:22:37,529 --> 00:22:39,190 se hacen en memoria con los alumnos 526 00:22:39,190 --> 00:22:39,910 es lo más rápido 527 00:22:39,910 --> 00:22:43,309 pero tengo todos los alumnos en memoria 528 00:22:43,309 --> 00:22:45,029 hasta 100.000 529 00:22:45,029 --> 00:22:46,390 vale 530 00:22:46,390 --> 00:22:49,089 de 100.000 para arriba 531 00:22:49,089 --> 00:22:51,230 20.000 para arriba 532 00:22:51,230 --> 00:22:53,450 depende de mi máquina 533 00:22:53,450 --> 00:22:55,730 pues hombre, no es la idea 534 00:22:55,730 --> 00:22:57,710 entonces en un instituto que no tenemos 535 00:22:57,710 --> 00:22:58,589 100.000 alumnos 536 00:22:58,589 --> 00:23:01,130 pues quizá esta sería la mejor opción 537 00:23:01,130 --> 00:23:03,549 que la aplicación los vuelque todos 538 00:23:03,549 --> 00:23:05,769 y luego ya pipipi, trabajamos con el set 539 00:23:05,769 --> 00:23:06,470 a toda velocidad 540 00:23:06,470 --> 00:23:09,410 en una aplicación que maneje 541 00:23:09,410 --> 00:23:11,849 100.000 entradas de usuarios 542 00:23:11,849 --> 00:23:14,089 de lo que sea, no los volcaría 543 00:23:14,089 --> 00:23:15,589 a todos en un set 544 00:23:15,589 --> 00:23:16,809 y trabajaría con ellos. 545 00:23:18,130 --> 00:23:19,670 Directamente trabajaría con el fichero. 546 00:23:20,490 --> 00:23:21,730 Como hacíamos con las líneas. 547 00:23:22,130 --> 00:23:23,410 Voy leyendo objeto por objeto. 548 00:23:23,970 --> 00:23:26,069 El que me interese, con ese hago los cambios 549 00:23:26,069 --> 00:23:27,289 y lo vuelvo a guardar. 550 00:23:27,849 --> 00:23:29,450 Etcétera. Trabajaría con el archivo. 551 00:23:29,529 --> 00:23:30,549 No los volcaría a todos. 552 00:23:32,410 --> 00:23:33,609 Con lo cual podría encontrar 553 00:23:33,609 --> 00:23:35,349 algún problemilla, pero bueno. 554 00:23:35,609 --> 00:23:37,150 Ya mañana o el viernes. 555 00:23:39,109 --> 00:23:39,730 Venga, pues