1 00:00:00,560 --> 00:00:25,339 Bueno, pues yo he hecho solamente, ahora mismo, para forzar esta excepción, la de insertar y recuperar, ¿vale? Entonces, en mi destino dao, pues mi destino dao, insertar, este sería, si quisierais hacer el método de validación, pues un método de validación he puesto yo aquí aparte si existe el destino falso para que no haga nada. 2 00:00:25,339 --> 00:00:26,920 entonces existe destino 3 00:00:26,920 --> 00:00:29,300 ahora mismo está sin hacer 4 00:00:29,300 --> 00:00:31,440 entonces le he puesto que devuelva 5 00:00:31,440 --> 00:00:33,560 false todo el rato para que nunca exista el destino 6 00:00:33,560 --> 00:00:35,100 pero aquí, ¿qué haríamos? 7 00:00:35,659 --> 00:00:37,500 pues abrir el fichero, ir leyendo 8 00:00:37,500 --> 00:00:39,179 y en el momento en el que encontramos 9 00:00:39,179 --> 00:00:41,320 un destino cuyo nombre es 10 00:00:41,320 --> 00:00:43,320 igual que este de aquí, que este nombre 11 00:00:43,320 --> 00:00:45,679 de aquí, pues ya devolveríamos 12 00:00:45,679 --> 00:00:47,640 true, ¿vale? pero bueno, esto es lo de menos 13 00:00:47,640 --> 00:00:49,320 entonces 14 00:00:49,320 --> 00:00:50,399 ahora mi 15 00:00:50,399 --> 00:00:54,740 mi insert 16 00:00:54,740 --> 00:00:56,960 pues si pasa la validación 17 00:00:56,960 --> 00:00:57,799 si la pasa 18 00:00:57,799 --> 00:01:00,960 ahora ya me hace el try catch 19 00:01:00,960 --> 00:01:02,600 ¿vale? entonces ¿qué try catch 20 00:01:02,600 --> 00:01:04,140 habréis hecho vosotros? 21 00:01:05,019 --> 00:01:06,739 un try catch como este de aquí 22 00:01:06,739 --> 00:01:08,719 que tengo yo en el get, lo pongo aquí un momentito 23 00:01:08,719 --> 00:01:10,239 ¿no? aquí 24 00:01:10,239 --> 00:01:12,939 un try 25 00:01:12,939 --> 00:01:14,680 habréis abierto, object output 26 00:01:14,680 --> 00:01:16,379 en este caso, object output string 27 00:01:16,379 --> 00:01:18,379 habréis escrito y habréis cerrado 28 00:01:18,379 --> 00:01:19,659 y ya está, y eso está bien 29 00:01:19,659 --> 00:01:22,060 pero hay una cosa que 30 00:01:22,060 --> 00:01:24,140 se llama el try con recursos 31 00:01:24,140 --> 00:01:27,019 que significa, si tú dentro de un try 32 00:01:27,019 --> 00:01:30,140 creas un recurso que es cerrable 33 00:01:30,140 --> 00:01:33,099 y los flujos de ficheros 34 00:01:33,099 --> 00:01:36,280 input, output, string, tanto si es 35 00:01:36,280 --> 00:01:38,879 object como file son cerrables porque tienen close 36 00:01:38,879 --> 00:01:40,959 ser cerrable significa que tiene el método close 37 00:01:40,959 --> 00:01:44,780 son cerrables, pues entonces nos podemos 38 00:01:44,780 --> 00:01:47,920 despreocupar de hacer el close siempre, que es algo que siempre 39 00:01:47,920 --> 00:01:50,959 deberíamos hacer si hacemos el try catch de esta manera 40 00:01:50,959 --> 00:01:54,120 es decir, fijaos yo en mi try catch que he hecho 41 00:01:54,120 --> 00:01:56,140 mi try-catch 42 00:01:56,140 --> 00:01:58,840 en lugar de 43 00:01:58,840 --> 00:02:00,879 hacer try 44 00:02:00,879 --> 00:02:02,879 la llave y hacer dentro 45 00:02:02,879 --> 00:02:04,040 en el try le añado 46 00:02:04,040 --> 00:02:06,239 un paréntesis con cositas 47 00:02:06,239 --> 00:02:07,920 este try, el try empieza aquí 48 00:02:07,920 --> 00:02:10,840 y en este paréntesis yo abro ya 49 00:02:10,840 --> 00:02:12,199 todos los recursos que quiera 50 00:02:12,199 --> 00:02:14,280 todos los que vaya a necesitar aquí dentro 51 00:02:14,280 --> 00:02:16,020 todos los flujos que yo vaya a necesitar 52 00:02:16,020 --> 00:02:18,139 en este caso solo voy a necesitar uno 53 00:02:18,139 --> 00:02:20,360 este object output stream para escribir 54 00:02:20,360 --> 00:02:23,000 pues lo abro aquí entre los paréntesis 55 00:02:23,000 --> 00:02:25,340 que me invento ahí en el try 56 00:02:25,340 --> 00:02:27,860 y luego aquí ya se abre 57 00:02:27,860 --> 00:02:29,139 mi try, claro, con la llave 58 00:02:29,139 --> 00:02:31,120 es que esto nos ha quedado muy largo 59 00:02:31,120 --> 00:02:33,800 ¿vale? entonces lo bajamos 60 00:02:33,800 --> 00:02:35,520 aquí abajo a lo mejor 61 00:02:35,520 --> 00:02:38,159 para que se vea mejor 62 00:02:38,159 --> 00:02:39,979 ¿vale? o sea, veis el try 63 00:02:39,979 --> 00:02:42,099 entre unos paréntesis 64 00:02:42,099 --> 00:02:43,039 que me he inventado ahí 65 00:02:43,039 --> 00:02:44,539 abre el recurso 66 00:02:44,539 --> 00:02:46,819 esto es otra forma de escribirlo 67 00:02:46,819 --> 00:02:49,560 en lugar de hacer el try normal sin paréntesis 68 00:02:49,560 --> 00:02:50,860 y abrirlo aquí dentro 69 00:02:50,860 --> 00:02:54,439 ¿qué gano? abriéndolo aquí entre paréntesis 70 00:02:54,439 --> 00:02:58,680 que se cierra solo cuando salimos del try catch 71 00:02:58,680 --> 00:03:00,979 me da igual que salga por aquí 72 00:03:00,979 --> 00:03:01,919 que salga por aquí 73 00:03:01,919 --> 00:03:05,139 cuando el try catch ya termina y continuamos por aquí abajo 74 00:03:05,139 --> 00:03:07,120 me da igual que sea por este camino que por otro 75 00:03:07,120 --> 00:03:09,020 este se cierra solo 76 00:03:09,020 --> 00:03:12,960 es una ventaja porque si no tenemos que asegurarnos de cerrarlo siempre 77 00:03:12,960 --> 00:03:15,520 tanto si me voy por el try como por el catch 78 00:03:15,520 --> 00:03:19,939 porque a lo mejor aquí ponemos os.close después del great object y estupendo 79 00:03:19,939 --> 00:03:22,219 pero si resulta que hemos salido por el catch 80 00:03:22,219 --> 00:03:24,039 y no se ha llegado a hacer el close 81 00:03:24,039 --> 00:03:25,900 ese recurso se queda abierto 82 00:03:25,900 --> 00:03:28,080 tendríamos que hacer 83 00:03:28,080 --> 00:03:30,759 asegurarnos de que el close está en las dos partes 84 00:03:30,759 --> 00:03:32,560 para lo cual lo mejor 85 00:03:32,560 --> 00:03:34,219 es hacer aquí la clausa final 86 00:03:34,219 --> 00:03:36,360 y esa de la que os hablaba que se puede poner opcional 87 00:03:36,360 --> 00:03:38,479 y el final y se hace 88 00:03:38,479 --> 00:03:40,080 tanto si vas por aquí como por aquí 89 00:03:40,080 --> 00:03:42,360 ¿vale? y ahí pone el close 90 00:03:42,360 --> 00:03:44,439 pero es mucho más sencillo 91 00:03:44,439 --> 00:03:46,439 usar esta sintaxis 92 00:03:46,439 --> 00:03:48,500 del try que es try con paréntesis 93 00:03:48,500 --> 00:03:50,939 y lo que se pone ahí dentro es la sentencia 94 00:03:50,939 --> 00:03:52,680 de abrir el recurso que tú quieras 95 00:03:52,680 --> 00:03:54,819 file input, file output 96 00:03:54,819 --> 00:03:56,900 el que tú quieras, que quieres abrir 97 00:03:56,900 --> 00:03:58,879 más de uno, haces todas las 98 00:03:58,879 --> 00:04:01,099 aperturas una tras otra, y ya está 99 00:04:01,099 --> 00:04:02,780 bueno, pues en este caso 100 00:04:02,780 --> 00:04:04,879 en mi try, que estamos escribiendo el archivo 101 00:04:04,879 --> 00:04:06,599 yo lo he abierto aquí 102 00:04:06,599 --> 00:04:08,699 para que se cierre solo y me despreocupe 103 00:04:08,699 --> 00:04:11,039 con lo cual dentro del try catch 104 00:04:11,039 --> 00:04:13,099 lo único que me queda es escribir el objeto 105 00:04:13,099 --> 00:04:14,860 estoy en el método insertar 106 00:04:14,860 --> 00:04:16,480 escribir el objeto, se acabó 107 00:04:16,480 --> 00:04:18,639 si salta la excepción pongo que devuelva 108 00:04:18,639 --> 00:04:20,639 false porque el método no se pudo ejecutar 109 00:04:20,639 --> 00:04:22,160 correctamente, que devuelva false 110 00:04:22,160 --> 00:04:24,379 y si no salta la excepción 111 00:04:24,379 --> 00:04:26,180 y hemos llegado a este punto, devuelva true 112 00:04:26,180 --> 00:04:28,160 el great object ha funcionado 113 00:04:28,160 --> 00:04:30,639 vale, pues el insert ha sido solamente eso 114 00:04:30,639 --> 00:04:32,519 validar si es que 115 00:04:32,519 --> 00:04:34,279 tenemos esa validación, si no nada 116 00:04:34,279 --> 00:04:36,680 y abrir 117 00:04:36,680 --> 00:04:38,540 el object output string, que si el 118 00:04:38,540 --> 00:04:40,379 fichero no existe lo creará de nuevas 119 00:04:40,379 --> 00:04:42,480 y si existe lo abre 120 00:04:42,480 --> 00:04:44,540 para añadir, porque aquí he puesto un true 121 00:04:44,540 --> 00:04:47,079 para añadir y luego escribe el objeto 122 00:04:47,079 --> 00:04:49,680 muy bien, ya está, ahora el get 123 00:04:49,680 --> 00:04:52,420 que es el otro único que he hecho 124 00:04:52,420 --> 00:04:56,160 el get, pues nada, el fichero 125 00:04:56,160 --> 00:04:57,819 ah, bueno, por cierto, el fichero 126 00:04:57,819 --> 00:05:00,480 ¿dónde he declarado la información del fichero? 127 00:05:00,480 --> 00:05:02,920 el fichero son los propios datos 128 00:05:02,920 --> 00:05:04,040 entonces tiene sentido 129 00:05:04,040 --> 00:05:07,899 que esa información esté recogida 130 00:05:07,899 --> 00:05:10,379 dentro de la clase DAO, tiene sentido 131 00:05:10,379 --> 00:05:12,220 esta clase DAO mía 132 00:05:12,220 --> 00:05:16,000 recorre, recoge todos los intríngulis, 133 00:05:16,100 --> 00:05:18,259 toda la basurilla asociada con el acceso a datos. 134 00:05:18,819 --> 00:05:21,879 Y esa basurilla son los métodos y el propio fichero. 135 00:05:22,019 --> 00:05:24,379 Toda esa basurilla tiene sentido que esté en esta clase. 136 00:05:25,240 --> 00:05:26,639 Bueno, pues en esta misma clase 137 00:05:26,639 --> 00:05:30,500 meto como propiedad el fichero 138 00:05:30,500 --> 00:05:31,740 donde van a estar los datos. 139 00:05:34,250 --> 00:05:36,470 Cuando yo instancie esta clase para usarla, 140 00:05:36,529 --> 00:05:37,689 se lo pasaré por constructor. 141 00:05:38,490 --> 00:05:40,689 Y así mi main puede elegir un fichero de datos 142 00:05:40,689 --> 00:05:41,810 cada vez, el que le dé la gana. 143 00:05:41,810 --> 00:05:44,170 cada vez elige, ahora quiero que mi destino 144 00:05:44,170 --> 00:05:45,509 esté aquí, ahora quiero que estén aquí 145 00:05:45,509 --> 00:05:48,170 ¿vale? se la metemos por constructor 146 00:05:48,170 --> 00:05:49,970 a esta clase, por ejemplo, una opción 147 00:05:49,970 --> 00:05:51,089 y ya está 148 00:05:51,089 --> 00:05:53,970 entonces aquí la he metido, bueno pues entonces el get 149 00:05:53,970 --> 00:05:55,670 el get que hace 150 00:05:55,670 --> 00:05:56,730 mi get 151 00:05:56,730 --> 00:05:59,910 bueno 152 00:05:59,910 --> 00:06:02,189 si el fichero no existe, datos es el fichero 153 00:06:02,189 --> 00:06:03,910 si el fichero no existe, nada 154 00:06:03,910 --> 00:06:06,050 no he podido recuperar, el result es null 155 00:06:06,050 --> 00:06:07,449 porque no he podido recuperarlo, claro 156 00:06:07,449 --> 00:06:10,029 y ahora si existe, pues me hago 157 00:06:10,029 --> 00:06:12,050 el flujo este del que hablamos 158 00:06:12,050 --> 00:06:13,970 veis, aquí este me lo ponen 159 00:06:13,970 --> 00:06:15,589 amarillo porque se me ha olvidado cerrarlo 160 00:06:15,589 --> 00:06:17,810 ah no, no se me ha olvidado cerrarlo, entonces, ah vale 161 00:06:17,810 --> 00:06:19,629 me está diciendo que 162 00:06:19,629 --> 00:06:21,329 podría 163 00:06:21,329 --> 00:06:23,930 no estar cerrado, ¿por qué? porque si yo 164 00:06:23,930 --> 00:06:26,209 me voy por el catch, no lo he cerrado 165 00:06:26,209 --> 00:06:28,089 veis, aquí lo he cerrado 166 00:06:28,089 --> 00:06:29,970 pero aquí no, si me fuera yo por el catch 167 00:06:29,970 --> 00:06:31,490 ¿por qué ha fallado algo aquí en la mitad? 168 00:06:32,370 --> 00:06:32,629 ¡pum! 169 00:06:33,410 --> 00:06:35,750 si me fuera por el catch io exception 170 00:06:35,750 --> 00:06:37,569 es decir, me sale un 171 00:06:37,569 --> 00:06:38,949 io exception aquí 172 00:06:38,949 --> 00:06:41,870 cuando yo hago un read object se ha roto algo 173 00:06:41,870 --> 00:06:44,089 en el ordenador y me sale un io exception 174 00:06:44,089 --> 00:06:45,829 yo saldría por aquí 175 00:06:45,829 --> 00:06:47,329 aquí no tengo el 176 00:06:47,329 --> 00:06:49,990 punto close, luego por eso 177 00:06:49,990 --> 00:06:51,629 me está avisando, cuidado que podrías 178 00:06:51,629 --> 00:06:53,730 escaparte sin cerrar el flujo 179 00:06:53,730 --> 00:06:55,829 por eso es mucho mejor meter 180 00:06:55,829 --> 00:06:56,470 esto 181 00:06:56,470 --> 00:06:59,250 como 182 00:06:59,250 --> 00:07:01,949 está antes, meterlo aquí 183 00:07:01,949 --> 00:07:06,670 pero profe, yo no he hecho la inicialización 184 00:07:06,670 --> 00:07:08,610 dentro del try, lo he hecho fuera 185 00:07:08,610 --> 00:07:10,689 bueno, es otra 186 00:07:10,689 --> 00:07:12,430 opción, pero entonces, vale 187 00:07:12,430 --> 00:07:14,449 ¿qué error? 188 00:07:14,810 --> 00:07:15,629 el de stream 189 00:07:15,629 --> 00:07:18,709 sí, pero no tiene nada que ver, lo que yo estoy diciendo no tiene 190 00:07:18,709 --> 00:07:20,709 nada que ver con ese error independiente, esto es otras cosas 191 00:07:20,709 --> 00:07:22,970 que estoy metiendo, claro, claro, no tiene nada que ver 192 00:07:22,970 --> 00:07:24,850 no, no, no, esto es otra, es una cuestión 193 00:07:24,850 --> 00:07:26,850 de sintaxis, de organización del código 194 00:07:26,850 --> 00:07:28,709 a eso no hemos llegado todavía 195 00:07:28,709 --> 00:07:30,769 vale, estoy 196 00:07:30,769 --> 00:07:32,930 explicando como yo soy yo el método 197 00:07:32,930 --> 00:07:34,170 lo estoy explicando, vale 198 00:07:34,170 --> 00:07:35,810 vale, pues entonces 199 00:07:35,810 --> 00:07:38,810 si yo lo meto aquí dentro y este punto 200 00:07:38,810 --> 00:07:40,129 y coma, entonces ahora ya me sobra 201 00:07:40,129 --> 00:07:42,670 ya me ahorro el problema 202 00:07:42,670 --> 00:07:43,629 del close 203 00:07:43,629 --> 00:07:46,290 y este close de aquí 204 00:07:46,290 --> 00:07:48,269 me sobra 205 00:07:48,269 --> 00:07:50,490 este close de aquí 206 00:07:50,490 --> 00:07:51,209 me sobra 207 00:07:51,209 --> 00:07:54,550 vale, bueno pues que hace mi método de get 208 00:07:54,550 --> 00:07:56,509 abre el 209 00:07:56,509 --> 00:07:57,149 fichero 210 00:07:57,149 --> 00:08:00,189 y ahora se mete en el bucle 211 00:08:00,189 --> 00:08:02,250 este famoso en el que está 212 00:08:02,250 --> 00:08:03,569 leyendo destinos 213 00:08:03,569 --> 00:08:04,529 leyendo destinos 214 00:08:04,529 --> 00:08:07,689 desde el momento en el que encuentre uno 215 00:08:07,689 --> 00:08:09,850 cuyo nombre coincide con el que me han pasado 216 00:08:09,850 --> 00:08:12,329 en el parámetro, ala, ya está 217 00:08:12,329 --> 00:08:14,470 ya tengo el destino 218 00:08:14,470 --> 00:08:16,350 de retorno, lo guardo aquí en resul 219 00:08:16,350 --> 00:08:17,670 para devolverlo luego 220 00:08:17,670 --> 00:08:20,269 y ya está, si he llegado 221 00:08:20,269 --> 00:08:22,310 a fin de fichero, aviso para que el while pare 222 00:08:22,310 --> 00:08:24,310 esto es otra posible 223 00:08:24,310 --> 00:08:26,069 excepción que puede salir, pues bueno, la capturo 224 00:08:26,069 --> 00:08:28,110 si me sale, devuelvo null, porque no he podido 225 00:08:28,110 --> 00:08:28,610 trabajar 226 00:08:28,610 --> 00:08:32,149 y si llego a este punto, todo ha ido 227 00:08:32,149 --> 00:08:33,570 bien, todo estupendo, devuelvo null 228 00:08:33,570 --> 00:08:35,049 bueno, pues hasta aquí 229 00:08:35,049 --> 00:08:38,029 esto está bien programado, suponemos 230 00:08:38,029 --> 00:08:39,450 tal y como hemos visto 231 00:08:39,450 --> 00:08:46,330 el insert de aquí arriba 232 00:08:46,330 --> 00:08:47,190 este 233 00:08:47,190 --> 00:08:49,870 el insert, de esto olvídate 234 00:08:49,870 --> 00:08:52,289 porque no lo está devolviendo 235 00:08:52,289 --> 00:08:53,610 falso todo el rato 236 00:08:53,610 --> 00:08:56,370 y el insert es 237 00:08:56,370 --> 00:08:58,210 abro para escribir 238 00:08:58,210 --> 00:09:00,169 para añadir, porque podría 239 00:09:00,169 --> 00:09:01,250 haber destinos de antes 240 00:09:01,250 --> 00:09:03,769 escribo el objeto y punto 241 00:09:03,769 --> 00:09:05,649 es lo único que tiene el insert 242 00:09:05,649 --> 00:09:08,070 entonces ahora 243 00:09:08,070 --> 00:09:10,070 lo ejecutamos, voy a borrar 244 00:09:10,070 --> 00:09:11,929 el fichero que hubiera de antes 245 00:09:11,929 --> 00:09:12,789 este 246 00:09:12,789 --> 00:09:14,610 delete 247 00:09:14,610 --> 00:09:17,330 va a empezar de cero 248 00:09:17,330 --> 00:09:20,230 ah bueno, que tengo la aplicación 249 00:09:20,230 --> 00:09:21,909 abierta, entonces al tenerla abierta 250 00:09:21,909 --> 00:09:23,830 no puedo acceder al fichero 251 00:09:23,830 --> 00:09:27,559 vale, ya está 252 00:09:27,559 --> 00:09:29,899 ahora 253 00:09:29,899 --> 00:09:32,019 ejecutamos, venga 254 00:09:32,019 --> 00:09:34,039 voy a insertar un destino 255 00:09:34,039 --> 00:09:36,019 nuevo, no existe el fichero 256 00:09:36,019 --> 00:09:37,419 no existe, lo va a tener que crear 257 00:09:37,419 --> 00:09:39,100 pues venga 258 00:09:39,100 --> 00:09:41,200 Nos vamos a París 259 00:09:41,200 --> 00:09:42,139 Mil euros 260 00:09:42,139 --> 00:09:45,340 Teóricamente está, no he puesto aviso de nada 261 00:09:45,340 --> 00:09:46,440 Un poco cutre, pero bueno 262 00:09:46,440 --> 00:09:49,419 Vale, vamos a recuperarlo, a ver si está 263 00:09:49,419 --> 00:09:50,799 ¿Tengo yo algún destino a París? 264 00:09:50,919 --> 00:09:52,580 Vamos a ver si me lo encuentra el get 265 00:09:52,580 --> 00:09:55,419 Esto no 266 00:09:55,419 --> 00:09:57,220 Ah, es que ya lo tenía de 267 00:09:57,220 --> 00:09:59,000 Vale, es que 268 00:09:59,000 --> 00:10:03,000 A ver, bórrate 269 00:10:03,000 --> 00:10:04,639 Vale, a ver 270 00:10:04,639 --> 00:10:06,340 Voy a 271 00:10:06,340 --> 00:10:11,269 Perdón, ya tenía 272 00:10:11,269 --> 00:10:13,669 vale, voy a ver 273 00:10:13,669 --> 00:10:14,549 refresh 274 00:10:14,549 --> 00:10:18,330 no existe el fichero, empezamos otra vez 275 00:10:18,330 --> 00:10:21,440 venga, vamos a insertar 276 00:10:21,440 --> 00:10:22,299 un destino 277 00:10:22,299 --> 00:10:25,460 este es el primer destino 278 00:10:25,460 --> 00:10:26,779 del fichero porque no existe 279 00:10:26,779 --> 00:10:29,480 mil, venga, voy a ver si tengo 280 00:10:29,480 --> 00:10:31,320 algún destino a París y cuánto cuesta 281 00:10:31,320 --> 00:10:33,620 paso el parámetro de búsqueda que es este 282 00:10:33,620 --> 00:10:35,059 aquí lo tengo 283 00:10:35,059 --> 00:10:37,179 lo ha encontrado en el fichero, vale 284 00:10:37,179 --> 00:10:39,240 son los únicos dos métodos que tengo 285 00:10:39,240 --> 00:10:41,460 venga, voy a insertar otro, ahora vamos a 286 00:10:41,460 --> 00:10:43,379 ir, vamos a hacer un destino 287 00:10:43,379 --> 00:10:45,600 un posible destino a Oslo que este cuesta 288 00:10:45,600 --> 00:10:46,340 2000 euros 289 00:10:46,340 --> 00:10:48,799 se supone que ha hecho el right object 290 00:10:48,799 --> 00:10:50,799 ahora vamos a recuperarlo 291 00:10:50,799 --> 00:10:53,740 venga, vamos a recuperar el primero otra vez 292 00:10:53,740 --> 00:10:54,700 a ver si me lo encuentra 293 00:10:54,700 --> 00:10:57,659 y aquí es cuando me sale 294 00:10:57,659 --> 00:10:59,759 la excepción, cuando me sale 295 00:10:59,759 --> 00:11:01,379 cuando yo añado 296 00:11:01,379 --> 00:11:02,980 un objeto 297 00:11:02,980 --> 00:11:05,600 a un fichero 298 00:11:05,600 --> 00:11:06,720 que ya tenía cosas 299 00:11:06,720 --> 00:11:09,799 ahí me dice, uy, algo se ha 300 00:11:09,799 --> 00:11:11,679 roto. El problema es que no nos da tiempo a arreglarlo. 301 00:11:12,399 --> 00:11:13,620 A ver, ¿por dónde van los tiros? 302 00:11:14,360 --> 00:11:15,639 Los tiros van porque 303 00:11:15,639 --> 00:11:17,539 cuando la máquina virtual de Java 304 00:11:17,539 --> 00:11:19,440 escribe en un fichero 305 00:11:19,440 --> 00:11:25,799 No, yo quería 306 00:11:25,799 --> 00:11:27,039 pisar. 307 00:11:28,039 --> 00:11:31,950 Vale, cuando la 308 00:11:31,950 --> 00:11:33,870 máquina virtual de Java, pues, escribe 309 00:11:33,870 --> 00:11:35,950 en un fichero, tiene los objetos. 310 00:11:37,309 --> 00:11:38,049 Cuando lo 311 00:11:38,049 --> 00:11:39,970 abre con el object output string para 312 00:11:39,970 --> 00:11:40,490 escribir. 313 00:11:41,549 --> 00:11:43,789 ¿Qué es lo que hace? Antes de nada, 314 00:11:44,250 --> 00:11:45,830 antes de nada, mete 315 00:11:45,830 --> 00:11:47,889 una cabecera, una header 316 00:11:47,889 --> 00:11:51,590 con información sobre los objetos 317 00:11:51,590 --> 00:11:53,830 qué tipo de objeto es, qué propiedades tiene 318 00:11:53,830 --> 00:11:55,769 con información, para luego poder 319 00:11:55,769 --> 00:11:57,750 deserializarlos bien, metes a cabecera 320 00:11:57,750 --> 00:11:59,590 lo primero de todo, y ahora ya 321 00:11:59,590 --> 00:12:01,570 cada write object te escribe un objeto 322 00:12:01,570 --> 00:12:02,730 ya está 323 00:12:02,730 --> 00:12:05,370 ¿vale? entonces ¿qué ocurre? 324 00:12:05,490 --> 00:12:07,250 cuando lo abrimos para añadir 325 00:12:07,250 --> 00:12:09,389 cuando lo abrimos para añadir 326 00:12:09,389 --> 00:12:12,090 pues cuando lo abrimos para añadir 327 00:12:12,090 --> 00:12:13,210 él 328 00:12:13,210 --> 00:12:16,370 vuelve a colar en medio otra vez 329 00:12:16,370 --> 00:12:18,889 cada vez que hace un new object output string 330 00:12:18,889 --> 00:12:20,789 vuelve a colar la cabecera 331 00:12:20,789 --> 00:12:22,669 entonces 332 00:12:22,669 --> 00:12:25,309 si yo estoy añadiendo 333 00:12:25,309 --> 00:12:27,230 me ha metido una cabecera ahí en medio 334 00:12:27,230 --> 00:12:30,490 la cabecera es una información de datos 335 00:12:30,490 --> 00:12:32,629 que mete él para facilitar la serialización 336 00:12:32,629 --> 00:12:34,889 o sea es una información sobre 337 00:12:34,889 --> 00:12:37,250 los objetos que hay en este archivo 338 00:12:37,250 --> 00:12:38,389 tienen estas propiedades 339 00:12:38,389 --> 00:12:39,870 son de esta clase, etc 340 00:12:39,870 --> 00:12:42,269 para luego cuando le demos a read object 341 00:12:42,269 --> 00:12:44,450 del ubicar la clase, recolocarlo, 342 00:12:44,529 --> 00:12:46,529 etcétera. Entonces, esa cabecera es imprescindible 343 00:12:46,529 --> 00:12:48,330 que esté al principio 344 00:12:48,330 --> 00:12:50,610 del fichero, pero sólo al principio. 345 00:12:51,509 --> 00:12:52,409 Entonces, la primera vez que hemos 346 00:12:52,409 --> 00:12:54,370 metido un objeto París, ha hecho 347 00:12:54,370 --> 00:12:55,929 la cabecera, ha metido París, 348 00:12:56,269 --> 00:12:57,850 y se ha quedado el fichero estupendo. Cuando 349 00:12:57,850 --> 00:12:59,929 hemos entrado para leer, 350 00:13:00,509 --> 00:13:02,529 él lee la cabecera del principio y muy bien. 351 00:13:03,230 --> 00:13:04,330 Vale, cuando hemos ahora, 352 00:13:04,450 --> 00:13:06,370 lo hemos vuelto a abrir, pero ahora para añadir, 353 00:13:07,210 --> 00:13:08,450 que ya tenía el París este. 354 00:13:08,970 --> 00:13:10,429 Pues cada vez que se hace Object Output 355 00:13:10,429 --> 00:13:11,809 String, esa clase 356 00:13:11,809 --> 00:13:14,570 en el punto en el que se abre 357 00:13:14,570 --> 00:13:16,269 que si es para añadir 358 00:13:16,269 --> 00:13:18,309 es ahí en la mitad, si es para añadir 359 00:13:18,309 --> 00:13:20,049 te mete la cabecera otra vez 360 00:13:20,049 --> 00:13:21,929 y ahí es donde te lo has tropeado 361 00:13:21,929 --> 00:13:23,309 entonces me ha metido la cabecera 362 00:13:23,309 --> 00:13:24,909 y me ha metido oslo 363 00:13:24,909 --> 00:13:27,610 y así se ha quedado, con una cabecera parís 364 00:13:27,610 --> 00:13:29,409 otra cabecera este 365 00:13:29,409 --> 00:13:31,549 y así se ha quedado, ya corrupto 366 00:13:31,549 --> 00:13:33,529 entonces cuando ahora lo hemos abierto para leer 367 00:13:33,529 --> 00:13:35,669 el object input string 368 00:13:35,669 --> 00:13:37,950 lee la primera cabecera, que esa es buena 369 00:13:37,950 --> 00:13:39,850 la lee la interpreta y se pone el objeto 370 00:13:39,850 --> 00:13:42,169 cuando llega aquí dice 371 00:13:42,169 --> 00:13:44,029 uy, esto no lo entiendo, esto no es objeto 372 00:13:44,029 --> 00:13:45,490 yo espero que haya una lista de objetos 373 00:13:45,490 --> 00:13:48,730 por eso sale, esto está corrupto 374 00:13:48,730 --> 00:13:48,970 ¿vale? 375 00:13:49,169 --> 00:13:52,149 no, la cabecera es una información 376 00:13:52,149 --> 00:13:54,350 que se ha colado ahí en medio por haber añadido 377 00:13:54,350 --> 00:13:56,710 entonces, ese es el problema 378 00:13:56,710 --> 00:13:58,250 esa cabecera que se ha quedado ahí en medio 379 00:13:58,250 --> 00:14:00,029 ¿vale? 380 00:14:00,509 --> 00:14:02,230 entonces, bueno, esto se puede arreglar de forma 381 00:14:02,230 --> 00:14:04,370 sencilla, pero bueno, ya no lo 382 00:14:04,370 --> 00:14:06,490 hagamos hoy, si podéis aguantar hasta el momento 383 00:14:06,490 --> 00:14:13,570 sería curioso ver cómo te lo arregla 384 00:14:13,570 --> 00:14:15,230 HGPT, así que pregúntaselo 385 00:14:15,230 --> 00:14:16,690 y nos lo cuentas el lunes