1 00:00:00,500 --> 00:00:05,259 vale, pues esta excepción si recordáis 2 00:00:05,259 --> 00:00:07,019 vinimos a decir 3 00:00:07,019 --> 00:00:07,919 porque nos daba 4 00:00:07,919 --> 00:00:09,779 y era 5 00:00:09,779 --> 00:00:12,439 porque cuando el object 6 00:00:12,439 --> 00:00:14,599 output string no se ve nada 7 00:00:14,599 --> 00:00:23,179 cuando el object output 8 00:00:23,179 --> 00:00:23,859 string 9 00:00:23,859 --> 00:00:26,899 lo abrimos para escribir en un 10 00:00:26,899 --> 00:00:28,920 fichero, pues el object 11 00:00:28,920 --> 00:00:30,660 output string según se abre 12 00:00:30,660 --> 00:00:32,640 y se asocia al fichero 13 00:00:32,640 --> 00:00:34,579 en el punto en el que se asocie 14 00:00:34,579 --> 00:00:37,399 que puede ser 2, o el comienzo 15 00:00:37,399 --> 00:00:38,899 si el añadir 16 00:00:38,899 --> 00:00:40,719 está a false, el parámetro de añadir del 17 00:00:40,719 --> 00:00:42,979 constructor está a false, o aquí al final 18 00:00:42,979 --> 00:00:44,679 si el parámetro 19 00:00:44,679 --> 00:00:46,579 del constructor de añadir está a true 20 00:00:46,579 --> 00:00:48,759 el object output string se engancha 21 00:00:48,759 --> 00:00:50,920 a dos puntos, o al comienzo 22 00:00:50,920 --> 00:00:52,820 del fichero eliminando todo lo que 23 00:00:52,820 --> 00:00:54,939 hubiera, o al final 24 00:00:54,939 --> 00:00:56,780 dejando lo que hubiera 25 00:00:56,780 --> 00:00:58,600 pues en el momento en que se abre 26 00:00:58,600 --> 00:01:00,320 y se engancha a un fichero 27 00:01:00,320 --> 00:01:01,179 él ya 28 00:01:01,179 --> 00:01:04,340 por el hecho de abrirse y asociarse 29 00:01:04,340 --> 00:01:06,599 a un fichero, ya mete una cabecera 30 00:01:06,599 --> 00:01:08,260 o bien aquí 31 00:01:08,260 --> 00:01:10,379 o bien aquí 32 00:01:10,379 --> 00:01:11,120 ¿vale? 33 00:01:11,659 --> 00:01:13,099 depende de donde se haya enganchado 34 00:01:13,099 --> 00:01:16,799 entonces, esta cabecera 35 00:01:16,799 --> 00:01:18,400 tiene información sobre 36 00:01:18,400 --> 00:01:20,859 que describe 37 00:01:20,859 --> 00:01:22,859 el objeto que se va a escribir 38 00:01:22,859 --> 00:01:24,579 es una información 39 00:01:24,579 --> 00:01:26,599 para describir, de alguna manera está pensada 40 00:01:26,599 --> 00:01:28,439 para describir que ahí van a ir objetos 41 00:01:28,439 --> 00:01:30,280 que es un fichero de objetos 42 00:01:30,280 --> 00:01:32,719 entonces esa cabecera para que luego el 43 00:01:32,719 --> 00:01:34,560 object input string 44 00:01:34,560 --> 00:01:36,840 pueda deserializar 45 00:01:36,840 --> 00:01:38,879 cuando abrimos el object input 46 00:01:38,879 --> 00:01:40,640 sino un fichero y empezamos a leer con el 47 00:01:40,640 --> 00:01:42,819 buque de lectura un objeto, otro objeto, otro objeto 48 00:01:42,819 --> 00:01:44,819 pues para que el object input 49 00:01:44,819 --> 00:01:46,700 string pueda deserializar 50 00:01:46,700 --> 00:01:48,879 esta cabecera tiene que estar 51 00:01:48,879 --> 00:01:50,640 pero solo una vez 52 00:01:50,640 --> 00:01:51,560 y al principio 53 00:01:51,560 --> 00:01:54,340 entonces es obligatorio que esta cabecera esté 54 00:01:54,340 --> 00:01:56,900 la que ha creado este, pero solo una vez 55 00:01:56,900 --> 00:01:57,540 y al principio 56 00:01:57,540 --> 00:01:59,959 entonces que ocurre 57 00:01:59,959 --> 00:02:01,620 que si nosotros estamos abriendo 58 00:02:01,620 --> 00:02:03,879 un fichero de objetos para añadir 59 00:02:03,879 --> 00:02:05,739 esta cabecera 60 00:02:05,739 --> 00:02:07,000 se va a ir colando 61 00:02:07,000 --> 00:02:09,639 entre medias y ahí viene 62 00:02:09,639 --> 00:02:11,539 el problema, cuando abrimos 63 00:02:11,539 --> 00:02:13,300 un fichero de objetos para añadir 64 00:02:13,300 --> 00:02:15,979 cuando abrimos un fichero de objetos para añadir 65 00:02:15,979 --> 00:02:17,500 se cuela esta cabecera 66 00:02:17,500 --> 00:02:19,520 y entonces ya 67 00:02:19,520 --> 00:02:21,199 el fichero se queda corrupto 68 00:02:21,199 --> 00:02:23,400 porque cuando el object imputation 69 00:02:23,400 --> 00:02:25,840 empiece a leer, quita la primera cabecera 70 00:02:25,840 --> 00:02:27,060 fenomenal, está muy bien 71 00:02:27,060 --> 00:02:28,659 Y ahora se pone a leer objetos 72 00:02:28,659 --> 00:02:30,900 Llega un momento en que llega una cosa rara 73 00:02:30,900 --> 00:02:32,879 Que no es un objeto como él espera 74 00:02:32,879 --> 00:02:34,319 Y entonces tú dices 75 00:02:34,319 --> 00:02:35,919 El string en el que estoy leyendo 76 00:02:35,919 --> 00:02:38,539 Mi string de entrada está corrupto 77 00:02:38,539 --> 00:02:40,259 Porque esto ha dejado de ser un objeto 78 00:02:40,259 --> 00:02:41,340 ¿Vale? 79 00:02:42,439 --> 00:02:44,139 Bueno, pues podemos arreglar esto 80 00:02:44,139 --> 00:02:45,599 Ayudándonos de la herencia en realidad 81 00:02:45,599 --> 00:02:47,400 Ahora que ya sabemos usar 82 00:02:47,400 --> 00:02:49,939 Es decir, el arreglo puede ser 83 00:02:49,939 --> 00:02:52,219 Oye tú, object output string 84 00:02:52,219 --> 00:02:54,319 Me gustaría cambiarte un poco 85 00:02:54,319 --> 00:02:55,240 Modificarte 86 00:02:55,240 --> 00:02:57,340 me gustaría modificarte 87 00:02:57,340 --> 00:02:59,800 y que cuando escribes 88 00:02:59,800 --> 00:03:01,699 la cabecera lo hagas 89 00:03:01,699 --> 00:03:03,919 solo cuando 90 00:03:03,919 --> 00:03:05,379 abres un fichero que no existe 91 00:03:05,379 --> 00:03:06,240 o está vacío 92 00:03:06,240 --> 00:03:08,539 sin bytes y sin nada 93 00:03:08,539 --> 00:03:11,680 en ese caso quiero que escribas la cabecera 94 00:03:11,680 --> 00:03:13,539 pero cuando tú te asocias 95 00:03:13,539 --> 00:03:15,840 a un fichero que ya existe y tiene bytes 96 00:03:15,840 --> 00:03:16,979 en ese caso 97 00:03:16,979 --> 00:03:18,960 no quiero que hagas nada 98 00:03:18,960 --> 00:03:21,879 esa es una pequeña modificación de esta clase 99 00:03:21,879 --> 00:03:23,719 querríamos modificar esta clase 100 00:03:23,719 --> 00:03:26,099 modificarla un pelín, para modificarla un pelín 101 00:03:26,099 --> 00:03:28,099 el comportamiento, y es que cuando 102 00:03:28,099 --> 00:03:29,620 se asocia en modo añadir 103 00:03:29,620 --> 00:03:31,759 entonces esto no lo haga 104 00:03:31,759 --> 00:03:34,000 simplemente no lo haga, se asocia y ya está 105 00:03:34,000 --> 00:03:36,439 entonces esta clase 106 00:03:36,439 --> 00:03:38,379 lógicamente no podemos tocarla 107 00:03:38,379 --> 00:03:40,060 hombre, como poder, podríamos 108 00:03:40,060 --> 00:03:42,219 yo me podría ir a la librería 109 00:03:42,219 --> 00:03:43,939 a la librería de la máquina virtual 110 00:03:43,939 --> 00:03:46,560 cogerla, decompilarla 111 00:03:46,560 --> 00:03:48,120 porque ahí están todas en punto clase 112 00:03:48,120 --> 00:03:50,379 decompilarla, cambiarla 113 00:03:50,379 --> 00:03:52,300 volverla a compilar y meterla en la JR 114 00:03:52,300 --> 00:03:53,879 es absurdo, no vamos a hacer eso 115 00:03:53,879 --> 00:03:56,219 pero lo que podemos hacer es 116 00:03:56,219 --> 00:03:58,120 oye, como yo quiero 117 00:03:58,120 --> 00:04:00,219 una casi igual que esta 118 00:04:00,219 --> 00:04:02,159 igual que esta 119 00:04:02,159 --> 00:04:04,539 casi en todo menos en una cosa 120 00:04:04,539 --> 00:04:06,379 pues bueno, que mecanismo 121 00:04:06,379 --> 00:04:08,580 tenemos muy sencillo para hacer una clase 122 00:04:08,580 --> 00:04:09,879 que tenga 123 00:04:09,879 --> 00:04:11,879 todo lo que tiene otra 124 00:04:11,879 --> 00:04:14,159 pero la modifique en alguna cosa 125 00:04:14,159 --> 00:04:16,040 si quiere o la sobreescriba 126 00:04:16,040 --> 00:04:18,220 pues la herencia, ¿verdad? 127 00:04:18,800 --> 00:04:20,040 la herencia, entonces oye 128 00:04:20,040 --> 00:04:21,319 vamos a hacernos una clase 129 00:04:21,319 --> 00:04:23,899 que herede de esta, con lo cual 130 00:04:23,899 --> 00:04:26,199 por el hecho de heredar, ya es igualita 131 00:04:26,199 --> 00:04:28,079 lo tiene todo, salvo el constructor 132 00:04:28,079 --> 00:04:29,399 pero el constructor lo podemos hacer 133 00:04:29,399 --> 00:04:31,660 nosotros, y ahora 134 00:04:31,660 --> 00:04:33,959 vamos a modificar en esta clase 135 00:04:33,959 --> 00:04:35,740 lo que queramos que funcione 136 00:04:35,740 --> 00:04:37,839 diferente de esta otra, entonces el 137 00:04:37,839 --> 00:04:39,819 mecanismo de herencia, siempre 138 00:04:39,819 --> 00:04:41,639 nos vale para hacer clones de una clase 139 00:04:41,639 --> 00:04:43,860 con una pequeña modificación, que es justo lo que queremos 140 00:04:43,860 --> 00:04:44,439 hacer aquí 141 00:04:44,439 --> 00:04:46,540 nada 142 00:04:46,540 --> 00:04:50,060 no trates de desentrañarlo 143 00:04:50,060 --> 00:04:51,120 yo que sé 144 00:04:51,120 --> 00:04:53,579 A ver, mi objetivo era poner 145 00:04:53,579 --> 00:04:54,740 M de la mía 146 00:04:54,740 --> 00:04:57,360 Object output string, o sea, un modificada 147 00:04:57,360 --> 00:04:59,779 De modificada object output string, pero vamos, queda igual 148 00:04:59,779 --> 00:05:00,980 ¿Vale? 149 00:05:01,939 --> 00:05:03,060 Entonces, si ya 150 00:05:03,060 --> 00:05:05,540 Pero no necesita como modificar 151 00:05:05,540 --> 00:05:06,980 La cabecera que ya hay 152 00:05:06,980 --> 00:05:12,019 O sea, no escribir una nueva 153 00:05:12,019 --> 00:05:14,060 Si no detectar que ya hay una 154 00:05:14,060 --> 00:05:17,259 Bueno, pero 155 00:05:17,259 --> 00:05:20,300 Claro, detectar que ya hay una, va a haber una 156 00:05:20,300 --> 00:05:21,500 Si el fichero ya tiene cosas 157 00:05:21,500 --> 00:05:24,579 Si el fichero tiene cosas 158 00:05:24,579 --> 00:05:26,420 Entonces no escribas cabecera 159 00:05:26,420 --> 00:05:29,939 Ni la modifica, claro 160 00:05:29,939 --> 00:05:32,160 No tiene por qué modificarla 161 00:05:32,160 --> 00:05:34,939 Porque esta cabecera ya ha descrito correctamente 162 00:05:34,939 --> 00:05:36,459 Que es un fichero de objetos y ya está 163 00:05:36,459 --> 00:05:37,399 No hay que añadir nada nuevo 164 00:05:37,399 --> 00:05:39,160 Lo único que tiene que hacer es añadir los objetos 165 00:05:39,160 --> 00:05:42,339 No hay que añadir información de los nuevos objetos 166 00:05:42,339 --> 00:05:45,060 No, no es necesario 167 00:05:45,060 --> 00:05:47,759 Esta cabecera es más simple 168 00:05:47,759 --> 00:05:49,339 Es una cosa más sencilla 169 00:05:49,339 --> 00:05:51,959 entonces una vez que tengamos esta variante 170 00:05:51,959 --> 00:05:54,300 ahora ya, cuando queramos 171 00:05:54,300 --> 00:05:56,000 añadir, usamos esta 172 00:05:56,000 --> 00:05:58,000 y cuando el fichero 173 00:05:58,000 --> 00:05:58,519 sea 174 00:05:58,519 --> 00:06:02,040 lo arranquemos de nuevas, usaremos 175 00:06:02,040 --> 00:06:03,699 esta otra, y ya está 176 00:06:03,699 --> 00:06:05,759 entonces este puede ser nuestro array 177 00:06:05,759 --> 00:06:07,220 ¿cuál es la idea entonces? 178 00:06:07,899 --> 00:06:09,939 hacer una variante de object 179 00:06:09,939 --> 00:06:11,899 output string que no escriba 180 00:06:11,899 --> 00:06:13,699 cabecera, simplemente 181 00:06:13,699 --> 00:06:16,120 se abra para añadir, entonces esa variante 182 00:06:16,120 --> 00:06:18,199 la usaremos, cuando tengamos 183 00:06:18,199 --> 00:06:19,879 que añadir algo 184 00:06:19,879 --> 00:06:22,500 y la original 185 00:06:22,500 --> 00:06:24,100 la de la JRE 186 00:06:24,100 --> 00:06:26,180 la usaremos cuando el fichero empiece 187 00:06:26,180 --> 00:06:27,980 de nuevas desde el principio vacío 188 00:06:27,980 --> 00:06:29,120 vale 189 00:06:29,120 --> 00:06:31,379 vale, pues entonces 190 00:06:31,379 --> 00:06:34,259 vamos a modificar entonces esta aplicación 191 00:06:34,259 --> 00:06:36,160 tal y como la teníamos para que ya no nos dé 192 00:06:36,160 --> 00:06:36,759 este problema 193 00:06:36,759 --> 00:06:38,839 entonces 194 00:06:38,839 --> 00:06:42,180 vamos a hacernos 195 00:06:42,180 --> 00:06:42,920 dígame 196 00:06:42,920 --> 00:06:46,620 que si lo he enseñado 197 00:06:46,620 --> 00:06:49,240 pues el otro día sí 198 00:06:49,240 --> 00:06:51,399 que era este 199 00:06:51,399 --> 00:06:54,019 vamos, está grabado 200 00:06:54,019 --> 00:06:58,579 claro que está enseñado 201 00:06:58,579 --> 00:07:00,439 estaban enseñados los dos que hice 202 00:07:00,439 --> 00:07:02,560 que eran solo el insert y el get 203 00:07:02,560 --> 00:07:04,500 los vimos 204 00:07:04,500 --> 00:07:06,379 de arriba a abajo, de hecho nos sirvió 205 00:07:06,379 --> 00:07:08,199 el insert para contarlo del 206 00:07:08,199 --> 00:07:09,620 try con recursos 207 00:07:09,620 --> 00:07:12,660 ¿dónde estabas el viernes? 208 00:07:13,579 --> 00:07:14,100 dormida 209 00:07:14,100 --> 00:07:18,439 recordáis esto, ¿no? 210 00:07:18,439 --> 00:07:20,000 El try con recursos que dijimos 211 00:07:20,000 --> 00:07:22,519 Que si lo tenía aquí dentro se cerraba automáticamente 212 00:07:22,519 --> 00:07:24,199 Y no teníamos que hacer el close 213 00:07:24,199 --> 00:07:28,319 Habéis hecho una desconexión total 214 00:07:28,319 --> 00:07:29,920 Del viernes a las 2 y cuarto 215 00:07:29,920 --> 00:07:30,639 2 y media 216 00:07:30,639 --> 00:07:34,040 Hasta hoy ha sido una desconexión absoluta 217 00:07:34,040 --> 00:07:38,660 Vale, bueno pues entonces vamos a hacer el arreglo 218 00:07:38,660 --> 00:07:40,660 Pues vamos a hacer esa otra clase modificada 219 00:07:40,660 --> 00:07:42,100 Vale 220 00:07:42,100 --> 00:07:44,439 App agencia de viajes 221 00:07:44,439 --> 00:07:45,180 Que es esta 222 00:07:45,180 --> 00:07:47,259 Pues venga 223 00:07:47,259 --> 00:07:48,600 Como tiene que ver con acceso a datos 224 00:07:48,600 --> 00:07:50,199 Vamos a meterlo en DAO directamente 225 00:07:50,199 --> 00:07:51,860 Y ya está en el paquete DAO 226 00:07:51,860 --> 00:07:55,740 Pues venga 227 00:07:55,740 --> 00:07:56,839 Una clase que sea 228 00:07:56,839 --> 00:07:59,579 Object.putString.add 229 00:07:59,579 --> 00:08:00,199 Por ejemplo 230 00:08:00,199 --> 00:08:04,439 Porque esta es la clase 231 00:08:04,439 --> 00:08:07,199 Que vamos a usar para añadir 232 00:08:07,199 --> 00:08:09,620 A ver que se le puede poner 233 00:08:09,620 --> 00:08:10,459 Uno el nombre que quiera 234 00:08:10,459 --> 00:08:17,120 Es decir 235 00:08:17,120 --> 00:08:19,240 Para añadir objetos al fichero 236 00:08:19,240 --> 00:08:20,139 Para añadir 237 00:08:20,139 --> 00:08:22,339 Esta es la que nos va 238 00:08:22,339 --> 00:08:24,560 Interesante instanciar 239 00:08:24,560 --> 00:08:26,220 Porque esta no va a escribir cabecera 240 00:08:26,220 --> 00:08:27,819 Vale 241 00:08:27,819 --> 00:08:32,860 Entonces queremos que sea igualita 242 00:08:32,860 --> 00:08:34,080 Que object output string 243 00:08:34,080 --> 00:08:36,200 Pues nuestro mecanismo de hacer una clase 244 00:08:36,200 --> 00:08:37,139 Clon de otra 245 00:08:37,139 --> 00:08:38,639 Es esta 246 00:08:38,639 --> 00:08:41,360 Es este, herencia y ya está 247 00:08:41,360 --> 00:09:04,139 Vale 248 00:09:04,139 --> 00:09:08,730 Entonces el primer error que nos da 249 00:09:08,730 --> 00:09:10,929 Es que necesitamos hacer 250 00:09:10,929 --> 00:09:11,990 Nos da el error 251 00:09:11,990 --> 00:09:14,789 porque no hemos 252 00:09:14,789 --> 00:09:16,730 hecho constructor, al no hacer 253 00:09:16,730 --> 00:09:17,370 constructor 254 00:09:17,370 --> 00:09:20,870 solamente tiene el por defecto 255 00:09:20,870 --> 00:09:22,750 entonces el por defecto 256 00:09:22,750 --> 00:09:24,669 se supone que llama 257 00:09:24,669 --> 00:09:26,789 el super de arriba por defecto 258 00:09:26,789 --> 00:09:28,590 también, que object output string 259 00:09:28,590 --> 00:09:29,970 no tiene por defecto 260 00:09:29,970 --> 00:09:32,549 entonces ese es el error que nos está dando 261 00:09:32,549 --> 00:09:34,889 que ya lo hemos visto otras veces 262 00:09:34,889 --> 00:09:36,889 vale, silencio 263 00:09:36,889 --> 00:09:38,669 vamos a hacer un 264 00:09:38,669 --> 00:09:40,629 constructor entonces específico 265 00:09:40,629 --> 00:09:43,149 basado en el constructor de Object Output String 266 00:09:43,149 --> 00:09:45,230 y el constructor de Object Output String 267 00:09:45,230 --> 00:09:46,429 que nos pedía, vamos a ver 268 00:09:46,429 --> 00:09:49,669 si nos vamos aquí a los otros métodos 269 00:09:49,669 --> 00:09:51,190 cuando lo hemos usado 270 00:09:51,190 --> 00:09:54,210 el Object Output String 271 00:09:54,210 --> 00:09:55,950 como veis 272 00:09:55,950 --> 00:09:58,389 su constructor necesita un 273 00:09:58,389 --> 00:10:00,269 File Output String 274 00:10:00,269 --> 00:10:01,870 ¿vale? recordad ¿no? 275 00:10:01,889 --> 00:10:03,769 el constructor de Object Output String 276 00:10:03,769 --> 00:10:07,210 le pasamos un String de salida 277 00:10:07,210 --> 00:10:09,029 al recurso que sea 278 00:10:09,029 --> 00:10:10,549 ¿vale? 279 00:10:10,629 --> 00:10:15,049 Entonces yo aquí le he pasado directamente un file output string 280 00:10:15,049 --> 00:10:20,269 Pero en general a object output string se le puede pasar cualquier cosa 281 00:10:20,269 --> 00:10:23,909 Que sea output string, output string es la super clase 282 00:10:23,909 --> 00:10:27,269 ¿Vale? Output string es la super clase 283 00:10:27,269 --> 00:10:29,049 ¿Y qué implementaciones hay? 284 00:10:29,210 --> 00:10:32,889 Pues un output string de fichero, un output string de socket 285 00:10:32,889 --> 00:10:39,870 Vamos a ver la jerarquía rápidamente para que no suene rara 286 00:10:39,870 --> 00:10:42,190 jerarquía 287 00:10:42,190 --> 00:10:49,289 imágenes 288 00:10:49,289 --> 00:11:07,639 output 289 00:11:07,639 --> 00:11:11,429 a ver si así me sale una buena 290 00:11:11,429 --> 00:11:18,080 vale, aquí por ejemplo 291 00:11:18,080 --> 00:11:26,059 vale, nosotros estamos usando 292 00:11:26,059 --> 00:11:28,240 como flujo de salida 293 00:11:28,240 --> 00:11:30,360 un fichero, un flujo de salida tal cual 294 00:11:30,360 --> 00:11:32,559 de Bison Fichero, File Output String 295 00:11:32,559 --> 00:11:33,299 ¿vale? 296 00:11:33,759 --> 00:11:36,519 File Output String es una implementación más 297 00:11:36,519 --> 00:11:38,460 de esta clase abstracta 298 00:11:38,460 --> 00:11:40,159 Output String que significa 299 00:11:40,159 --> 00:11:42,360 cualquier flujo de salida de bytes 300 00:11:42,360 --> 00:11:44,379 cualquier flujo de salida de bytes 301 00:11:44,379 --> 00:11:48,200 es decir 302 00:11:48,200 --> 00:11:50,299 outputString es una clase abstracta 303 00:11:50,299 --> 00:11:51,279 esta no la instanciamos 304 00:11:51,279 --> 00:11:54,080 pero su significado es 305 00:11:54,080 --> 00:11:56,779 cualquier flujo a partir del cual 306 00:11:56,779 --> 00:11:58,840 yo pueda mandar bytes hacia algún lado 307 00:11:58,840 --> 00:12:00,059 hacia algún lado 308 00:12:00,059 --> 00:12:02,360 yo los enchufo por aquí desde mi aplicación Java 309 00:12:02,360 --> 00:12:03,039 con el write 310 00:12:03,039 --> 00:12:05,820 con el write los voy enchufando 311 00:12:05,820 --> 00:12:08,039 con lo cual outputString tendrá el método write 312 00:12:08,039 --> 00:12:09,659 yo con el write 313 00:12:09,659 --> 00:12:11,580 voy aquí enchufando los bytes 314 00:12:11,580 --> 00:12:13,740 un byte, un byte, un byte, lo enchufo con el write 315 00:12:13,740 --> 00:12:15,840 y sale hacia algún sitio 316 00:12:15,840 --> 00:12:17,620 ese sitio 317 00:12:17,620 --> 00:12:19,240 hacia el que sale 318 00:12:19,240 --> 00:12:21,779 esos bytes que yo voy enchufando 319 00:12:21,779 --> 00:12:23,820 con el método write de output string 320 00:12:23,820 --> 00:12:25,240 ese sitio cual es? 321 00:12:25,340 --> 00:12:27,399 ese sitio ya depende de la implementación 322 00:12:27,399 --> 00:12:29,799 por eso hay diferentes implementaciones 323 00:12:29,799 --> 00:12:31,000 ¿vale? 324 00:12:31,139 --> 00:12:33,399 entonces la única implementación que hemos usado nosotros 325 00:12:33,399 --> 00:12:34,399 es esta 326 00:12:34,399 --> 00:12:37,220 que es el caso particular 327 00:12:37,220 --> 00:12:39,860 en el cual los bytes que tú enchufas con el write 328 00:12:39,860 --> 00:12:41,259 ¿dónde salen? 329 00:12:41,259 --> 00:12:43,320 hago un fichero y ahí se quedan 330 00:12:43,320 --> 00:12:45,419 ¿vale? y ahí se quedan 331 00:12:45,419 --> 00:12:47,639 pero bueno, hay más implementaciones 332 00:12:47,639 --> 00:12:49,059 de output string 333 00:12:49,059 --> 00:12:50,279 entre ellas esta 334 00:12:50,279 --> 00:12:52,519 ¿vale? que también hemos usado 335 00:12:52,519 --> 00:12:55,379 esto va 336 00:12:55,379 --> 00:12:57,240 a una tubería, bueno, cosas 337 00:12:57,240 --> 00:12:58,559 que ahora mismo no nos interesa 338 00:12:58,559 --> 00:13:00,500 entonces, ¿qué quiero? esto para que 339 00:13:00,500 --> 00:13:02,440 a cuento de que ha venido 340 00:13:02,440 --> 00:13:05,220 pues para decir que al constructor de object 341 00:13:05,220 --> 00:13:07,320 output string, al constructor le hemos pasado 342 00:13:07,320 --> 00:13:09,379 nosotros un file output string, pero le puedes 343 00:13:09,379 --> 00:13:11,500 pasar cualquier flujo 344 00:13:11,500 --> 00:13:13,240 de salida general, cualquier flujo 345 00:13:13,240 --> 00:13:15,399 de salida, entonces vamos a 346 00:13:15,399 --> 00:13:16,840 nosotros ahora 347 00:13:16,840 --> 00:13:18,299 declarar nuestro constructor 348 00:13:18,299 --> 00:13:20,600 a ver 349 00:13:20,600 --> 00:13:21,779 dime 350 00:13:21,779 --> 00:13:33,200 con cualquier cosa que sea 351 00:13:33,200 --> 00:13:35,100 una instancia de output stream 352 00:13:35,100 --> 00:13:37,139 en general y file output stream lo es 353 00:13:37,139 --> 00:13:39,139 acuérdate de la herencia, en una 354 00:13:39,139 --> 00:13:40,740 superclase cae 355 00:13:40,740 --> 00:13:43,379 cualquier instancia de cualquier subclase 356 00:13:43,379 --> 00:13:46,980 exacto 357 00:13:46,980 --> 00:13:48,899 con otro output string 358 00:13:48,899 --> 00:13:50,580 entonces por eso el constructor 359 00:13:50,580 --> 00:13:53,440 cuando ahora yo llame al super 360 00:13:53,440 --> 00:13:54,879 de object output string 361 00:13:54,879 --> 00:13:56,940 le voy a pasar una output string en general 362 00:13:56,940 --> 00:13:59,100 entonces, a ver, vamos a hacer 363 00:13:59,100 --> 00:14:00,399 el constructor que me pide 364 00:14:00,399 --> 00:14:02,779 porque me pide hace un constructor explícito 365 00:14:02,779 --> 00:14:04,679 porque el de por defecto no me vale 366 00:14:04,679 --> 00:14:06,360 porque el por defecto es sin parámetros 367 00:14:06,360 --> 00:14:08,100 llama al sin parámetros del de arriba 368 00:14:08,100 --> 00:14:10,039 El de arriba no tiene sin parámetros 369 00:14:10,039 --> 00:14:12,100 Entonces haz uno explícito que encaje 370 00:14:12,100 --> 00:14:13,759 Pues en eso estamos 371 00:14:13,759 --> 00:14:15,440 Haciendo uno explícito que encaje 372 00:14:15,440 --> 00:14:18,120 Pues vamos a hacer un constructor 373 00:14:18,120 --> 00:14:19,759 Explícito que encaje 374 00:14:19,759 --> 00:14:23,799 Y a este constructor ¿Qué le pasamos? 375 00:14:23,980 --> 00:14:25,320 Un output string 376 00:14:25,320 --> 00:14:32,700 Y ahora lo hacemos 377 00:14:32,700 --> 00:14:35,320 Llamando al constructor de la superclase 378 00:14:35,320 --> 00:14:37,360 Que la superclase ahora ya sí que es esta 379 00:14:37,360 --> 00:14:40,919 Que recibe este 380 00:14:40,919 --> 00:14:47,649 ¿Vale? 381 00:14:48,370 --> 00:14:50,289 entonces da un errorcito 382 00:14:50,289 --> 00:14:53,049 porque al instanciar 383 00:14:53,049 --> 00:14:54,649 oye output stream puede salir una 384 00:14:54,649 --> 00:14:56,870 excepción 385 00:14:56,870 --> 00:14:57,990 pero bueno 386 00:14:57,990 --> 00:15:23,750 la propago y se acabó 387 00:15:23,750 --> 00:15:26,090 fijaos que aquí, cosa curiosa 388 00:15:26,090 --> 00:15:27,309 cuando yo he quitado el este 389 00:15:27,309 --> 00:15:29,090 aquí 390 00:15:29,090 --> 00:15:35,980 no me ofrece 391 00:15:35,980 --> 00:15:38,240 capturarla 392 00:15:38,240 --> 00:15:40,299 no me ofrece el try catch 393 00:15:40,299 --> 00:15:43,299 aquí en el constructor que es un método muy especialito 394 00:15:43,299 --> 00:15:45,580 no me ofrece capturarla 395 00:15:45,580 --> 00:15:48,240 me ofrece solamente propagarla 396 00:15:48,240 --> 00:15:51,190 ¿veis? 397 00:15:51,929 --> 00:15:53,429 solo me ofrece propagarla 398 00:15:53,429 --> 00:15:54,990 no me ofrece capturarla 399 00:15:54,990 --> 00:15:57,750 porque el constructor es un método especialito 400 00:15:57,750 --> 00:16:01,110 es un método, es el único método 401 00:16:01,110 --> 00:16:03,029 si recordáis, el único método 402 00:16:03,029 --> 00:16:05,350 que aquí no se pone ni void 403 00:16:05,350 --> 00:16:07,169 ni valor de retorno, ni nada 404 00:16:07,169 --> 00:16:08,450 ¿por qué? 405 00:16:08,929 --> 00:16:10,070 porque el constructor 406 00:16:10,070 --> 00:16:12,889 se supone que devuelve 407 00:16:12,889 --> 00:16:14,789 el objeto que se acaba de instanciar 408 00:16:14,789 --> 00:16:17,289 es obligatorio que el constructor 409 00:16:17,289 --> 00:16:19,789 Devuelva el objeto que se acaba de instanciar 410 00:16:19,789 --> 00:16:21,169 ¿Vale? 411 00:16:22,190 --> 00:16:22,750 Entonces 412 00:16:22,750 --> 00:16:25,110 Aquí el try-catch 413 00:16:25,110 --> 00:16:26,250 Ni siquiera te lo permite 414 00:16:26,250 --> 00:16:28,549 Porque si hiciéramos un try-catch 415 00:16:28,549 --> 00:16:33,299 Bueno 416 00:16:33,299 --> 00:16:35,519 Se va a volverlo a que se lo voy a hacer 417 00:16:35,519 --> 00:16:42,059 Es decir, no solo te devuelve el objeto 418 00:16:42,059 --> 00:16:43,860 Sin más 419 00:16:43,860 --> 00:16:44,500 En memoria 420 00:16:44,500 --> 00:16:47,200 Sino que te devuelve otro objeto 421 00:16:47,200 --> 00:16:48,500 Que declara 422 00:16:48,500 --> 00:16:51,860 Las propiedades de ESL que obtenemos con un get class 423 00:16:51,860 --> 00:16:52,940 Bueno, unas cosas extrañas 424 00:16:52,940 --> 00:16:54,960 lo digo solo como explicación 425 00:16:54,960 --> 00:16:57,039 de por qué ni siquiera me ha ofrecido el try-catch 426 00:16:57,039 --> 00:16:58,019 ¿vale? 427 00:16:59,039 --> 00:17:01,019 entonces, si yo hago un try-catch 428 00:17:01,019 --> 00:17:03,139 y no funcionara el super 429 00:17:03,139 --> 00:17:04,640 la instanciación en el catch 430 00:17:04,640 --> 00:17:07,220 en el catch, tendría yo 431 00:17:07,220 --> 00:17:09,000 que hacer el trabajo del super que no ha podido 432 00:17:09,000 --> 00:17:11,259 funcionar, y no podemos 433 00:17:11,259 --> 00:17:13,140 hacerlo, ese trabajo tendríamos que hacerlo 434 00:17:13,140 --> 00:17:15,079 llamando al super otra vez, y otra vez 435 00:17:15,079 --> 00:17:16,799 volveríamos a crear la misma sección 436 00:17:16,799 --> 00:17:18,220 entonces, es imposible 437 00:17:18,220 --> 00:17:21,299 hacer aquí un try-catch que tenga sentido 438 00:17:21,299 --> 00:17:22,019 en un constructor 439 00:17:22,019 --> 00:17:24,920 entonces 440 00:17:24,920 --> 00:17:27,380 por eso ni siquiera me ofrece 441 00:17:27,380 --> 00:17:29,079 el try catch 442 00:17:29,079 --> 00:17:30,319 vale 443 00:17:30,319 --> 00:17:33,700 pero si se acabó, si no puede instanciar 444 00:17:33,700 --> 00:17:34,700 este pues 445 00:17:34,700 --> 00:17:37,740 se lanza excepción y listo y se para el programa 446 00:17:37,740 --> 00:17:39,500 y el constructor 447 00:17:39,500 --> 00:17:41,500 no completa su tarea, no devuelve 448 00:17:41,500 --> 00:17:43,079 nada y nada, bueno 449 00:17:43,079 --> 00:17:45,359 pues esta clase ahora 450 00:17:45,359 --> 00:17:47,619 es un clon idéntico, es la misma 451 00:17:47,619 --> 00:17:48,759 que esta de aquí 452 00:17:48,759 --> 00:17:51,220 porque tiene todo lo que tiene esta 453 00:17:51,220 --> 00:17:54,140 y hemos hecho el constructor, pero el constructor 454 00:17:54,140 --> 00:17:55,920 no se hereda, el constructor hay que hacerlo específicamente 455 00:17:55,920 --> 00:17:57,920 lo hemos hecho, pero el constructor está basado en llamar 456 00:17:57,920 --> 00:18:00,059 al constructor de arriba, ya está, con lo cual 457 00:18:00,059 --> 00:18:02,039 es un clone, vale, pero queremos hacer 458 00:18:02,039 --> 00:18:03,920 un cambio, que es, queremos 459 00:18:03,920 --> 00:18:05,960 que esta clase no escriba la 460 00:18:05,960 --> 00:18:07,839 cabecera, entonces en algún sitio 461 00:18:07,839 --> 00:18:10,059 tiene que estar el método que escribe en la cabecera 462 00:18:10,059 --> 00:18:11,079 y ese método habría que 463 00:18:11,079 --> 00:18:13,960 sobrescribirlo 464 00:18:13,960 --> 00:18:15,880 entonces, hombre, uno 465 00:18:15,880 --> 00:18:17,839 se puede poner a buscar los métodos que tiene 466 00:18:17,839 --> 00:18:19,859 object output string, a ver 467 00:18:19,859 --> 00:18:22,660 cuál de esos métodos tiene pinta de estar relacionado 468 00:18:22,660 --> 00:18:24,079 con escribir en la cabecera 469 00:18:24,079 --> 00:18:34,779 y encontrará uno que se llama así. 470 00:18:35,299 --> 00:18:36,920 Voy a asegurarme de si es este. 471 00:18:37,559 --> 00:18:41,099 ¿Cómo puedo yo asegurarme de que he acertado con el nombre 472 00:18:41,099 --> 00:18:44,720 y el que he escrito es el de la superclase? 473 00:18:45,940 --> 00:18:47,539 Muy bien, poniendo la anotación. 474 00:18:55,240 --> 00:18:57,619 Vale, acepta la anotación sin problema. 475 00:18:58,420 --> 00:19:00,039 Entonces, al aceptar la anotación 476 00:19:00,039 --> 00:19:02,380 es que existe un método en la superclase 477 00:19:02,380 --> 00:19:03,920 que es este, que hace 478 00:19:03,920 --> 00:19:05,980 el que, pues deducimos que lo que hace 479 00:19:05,980 --> 00:19:07,839 es escribir la cabecera, porque parece que se llama así 480 00:19:07,839 --> 00:19:09,420 por algo se llama así, ¿no? 481 00:19:09,880 --> 00:19:11,460 pues ¿qué vamos a hacer? dejarlo vacío 482 00:19:11,460 --> 00:19:13,940 ya está, y ya está, ya tenemos la clase 483 00:19:13,940 --> 00:19:15,859 modificada, es un clon 484 00:19:15,859 --> 00:19:17,759 de object output string, pero esta no 485 00:19:17,759 --> 00:19:19,299 escribe cabecera, no la escribe 486 00:19:19,299 --> 00:19:22,000 pues perfecto, es justo lo que queremos 487 00:19:22,000 --> 00:19:23,940 hacer un 488 00:19:23,940 --> 00:19:25,900 object output string asociado al 489 00:19:25,900 --> 00:19:27,599 fichero, pero que no escriba cabecera 490 00:19:27,599 --> 00:19:29,579 se quede ahí, simplemente esperando a los 491 00:19:29,579 --> 00:19:31,700 para escribir los objetos, punto pelota 492 00:19:31,700 --> 00:19:37,200 ya está, ya tenemos esta clase 493 00:19:37,200 --> 00:19:38,400 ahora 494 00:19:38,400 --> 00:19:41,839 lo que cambia aquí es 495 00:19:41,839 --> 00:19:43,380 nuestro insert 496 00:19:43,380 --> 00:19:47,700 si nos vamos al destino dado con el insert 497 00:19:47,700 --> 00:19:49,180 ahora 498 00:19:49,180 --> 00:19:50,480 esto cambia 499 00:19:50,480 --> 00:19:52,460 si 500 00:19:52,460 --> 00:19:55,440 ahora hay que distinguir si el fichero 501 00:19:55,440 --> 00:19:56,559 existe o no existe 502 00:19:56,559 --> 00:19:59,559 cuando vamos a insertar un destino nuevo 503 00:19:59,559 --> 00:20:03,160 Si el fichero no existe 504 00:20:03,160 --> 00:20:07,119 No lo abrimos 505 00:20:07,119 --> 00:20:07,880 Para añadir 506 00:20:07,880 --> 00:20:10,480 Perdón, si el fichero existe 507 00:20:10,480 --> 00:20:12,660 Lo abrimos con el 508 00:20:12,660 --> 00:20:14,119 Objeto put string de añadir 509 00:20:14,119 --> 00:20:16,460 Y si no existe con el otro 510 00:20:16,460 --> 00:20:20,779 Bueno, pues entonces nuestro insert 511 00:20:20,779 --> 00:20:21,640 Cambiará aquí 512 00:20:21,640 --> 00:20:23,619 Y será 513 00:20:23,619 --> 00:20:25,599 Si 514 00:20:25,599 --> 00:20:28,220 El fichero existe 515 00:20:28,220 --> 00:20:29,880 Y mi fichero es este 516 00:20:29,880 --> 00:20:33,009 Si datos 517 00:20:33,009 --> 00:20:35,549 Ya existe 518 00:20:35,549 --> 00:20:38,410 Si datos existe 519 00:20:38,410 --> 00:20:39,950 Entonces 520 00:20:39,950 --> 00:20:43,130 Yo me voy a hacer un output string 521 00:20:43,130 --> 00:20:49,089 Lo voy a hacer 522 00:20:49,089 --> 00:20:51,130 Vale, más claro 523 00:20:51,130 --> 00:20:54,309 Si el fichero existe, entonces tenemos que añadirlo 524 00:20:54,309 --> 00:20:56,410 Con el object output string de añadir 525 00:20:56,410 --> 00:20:58,549 Entonces, si el fichero existe 526 00:20:58,549 --> 00:21:00,410 Sería 527 00:21:00,410 --> 00:21:01,769 Esto que hemos hecho aquí 528 00:21:01,769 --> 00:21:06,200 Si el fichero existe 529 00:21:06,200 --> 00:21:10,640 Pero sería 530 00:21:10,640 --> 00:21:11,859 Esta 531 00:21:11,859 --> 00:21:15,109 el que queremos 532 00:21:15,109 --> 00:21:18,130 si el fichero existe 533 00:21:18,130 --> 00:21:19,730 el que queremos es este 534 00:21:19,730 --> 00:21:21,670 que es el que no escribe cabecera 535 00:21:21,670 --> 00:21:23,430 este es el que queremos 536 00:21:23,430 --> 00:21:26,759 que no escribe cabecera 537 00:21:26,759 --> 00:21:35,039 y si el fichero 538 00:21:35,039 --> 00:21:48,490 no existe, quiero el original 539 00:21:48,490 --> 00:22:03,589 mío, vale, ha quedado 540 00:22:03,589 --> 00:22:04,930 un ifelse muy feo 541 00:22:04,930 --> 00:22:07,549 porque estoy repitiendo código 542 00:22:07,549 --> 00:22:09,210 entonces 543 00:22:09,210 --> 00:22:11,410 veis esta sentencia 544 00:22:11,410 --> 00:22:13,150 y esta sentencia 545 00:22:13,150 --> 00:22:14,789 Pues son la misma 546 00:22:14,789 --> 00:22:17,369 Entonces podríamos sacar este objeto 547 00:22:17,369 --> 00:22:19,269 En lugar de meterlo en el try 548 00:22:19,269 --> 00:22:20,269 Con recursos aquí 549 00:22:20,269 --> 00:22:22,549 Podríamos sacarlo aquí 550 00:22:22,549 --> 00:22:25,329 Y luego instanciarlo 551 00:22:25,329 --> 00:22:26,450 Aquí dentro sin más 552 00:22:26,450 --> 00:22:28,970 Pero bueno, esto ya sería en arreglos de 553 00:22:28,970 --> 00:22:31,890 Por encima del método 554 00:22:31,890 --> 00:22:34,029 Por encima del método 555 00:22:34,029 --> 00:22:36,450 Este es el nombre del fichero 556 00:22:36,450 --> 00:22:39,450 No tiene nada, entonces 557 00:22:39,450 --> 00:22:47,250 Ahora hemos modificado el try 558 00:22:47,250 --> 00:22:52,109 Sí, lo hemos modificado haciendo que no haga nada 559 00:22:52,109 --> 00:22:52,890 Ya está modificado 560 00:22:52,890 --> 00:22:55,990 WriteStreamHeader escribe la cabecera 561 00:22:55,990 --> 00:22:57,730 Y esta variante nuestra 562 00:22:57,730 --> 00:22:59,990 No queremos que escriba nada, pues se queda en blanco 563 00:22:59,990 --> 00:23:04,079 Vale, pues entonces si el fichero 564 00:23:04,079 --> 00:23:06,119 Existe, lo abrimos 565 00:23:06,119 --> 00:23:08,039 En nuestra versión, que es la que no escribe 566 00:23:08,039 --> 00:23:08,660 Cabecera 567 00:23:08,660 --> 00:23:10,920 Lo abrimos en nuestra versión 568 00:23:10,920 --> 00:23:14,029 Y escribimos el objeto 569 00:23:14,029 --> 00:23:17,690 Y si el fichero si existe 570 00:23:17,690 --> 00:23:20,480 Entonces 571 00:23:20,480 --> 00:23:22,819 Y si el fichero no existe 572 00:23:22,819 --> 00:23:23,500 Perdón 573 00:23:23,500 --> 00:23:27,400 Entonces ahora lo abro en la versión original 574 00:23:27,400 --> 00:23:34,900 ¿Vale? 575 00:23:35,099 --> 00:23:36,779 Este true aquí lo puedo quitar 576 00:23:36,779 --> 00:23:37,779 Porque como no existe 577 00:23:37,779 --> 00:23:39,920 Añadir 578 00:23:39,920 --> 00:23:42,000 Es como escribir desde el principio 579 00:23:42,000 --> 00:23:44,200 O sea, si el fichero no existe, abro con esta 580 00:23:44,200 --> 00:23:51,670 Pero bueno, esto es lo mismo que teníamos el otro día 581 00:23:51,670 --> 00:24:12,440 ¿Vale? 582 00:24:26,160 --> 00:24:26,920 ¿Hasta dónde? 583 00:24:28,440 --> 00:24:29,700 ¿Pero qué quieres ver por aquí? 584 00:24:29,779 --> 00:24:30,700 ¿Por encima si no hay nada? 585 00:24:30,700 --> 00:24:33,579 no, quiero ver lo que has puesto 586 00:24:33,579 --> 00:24:37,119 en file nada 587 00:24:37,119 --> 00:24:39,400 esto ya en el programa principal 588 00:24:39,400 --> 00:24:40,519 ya se lo pasaré 589 00:24:40,519 --> 00:24:48,279 el existe destino 590 00:24:48,279 --> 00:24:50,940 lo habíamos dejado en blanco 591 00:24:50,940 --> 00:24:52,400 por ejemplo, esto si queremos validar 592 00:24:52,400 --> 00:24:54,000 si existe destino se hace este método 593 00:24:54,000 --> 00:24:54,759 yo ahora mismo 594 00:24:54,759 --> 00:24:57,819 pongo false para que 595 00:24:57,819 --> 00:25:00,779 poder trabajar y que me diga que no existe 596 00:25:00,779 --> 00:25:02,539 y avance, pero este se validaría 597 00:25:02,539 --> 00:25:03,700 leyendo el fichero, etc 598 00:25:03,700 --> 00:25:06,160 no os acordáis de nada del viernes 599 00:25:06,160 --> 00:25:08,140 Está el viernes olvidado en toda vuestra cabeza 600 00:25:08,140 --> 00:25:11,440 ¿Eh? 601 00:25:16,920 --> 00:25:17,660 ¿En serio? 602 00:25:27,980 --> 00:25:29,180 Vale, vale, bueno 603 00:25:29,180 --> 00:25:31,200 Joder 604 00:25:31,200 --> 00:25:32,700 Madre de Dios 605 00:25:32,700 --> 00:25:33,859 La que 606 00:25:33,859 --> 00:25:39,099 Pero vamos 607 00:25:39,099 --> 00:25:44,740 Joder, ¿cómo os habéis puesto, por favor? 608 00:25:47,440 --> 00:25:48,680 Tampoco habéis hecho muchos esfuerzos 609 00:25:48,680 --> 00:25:49,740 Por mirarlo el fin de semana, ¿no? 610 00:25:53,980 --> 00:25:54,380 Bueno 611 00:25:54,380 --> 00:25:56,440 Está todo en la grabación en cualquier caso 612 00:25:56,440 --> 00:25:57,299 El viernes 613 00:25:57,299 --> 00:25:58,259 Vale 614 00:25:58,259 --> 00:26:01,440 Ya está 615 00:26:01,440 --> 00:26:05,599 Si el fichero existe 616 00:26:05,599 --> 00:26:08,339 Abrimos con este y escribimos 617 00:26:08,339 --> 00:26:10,119 Y si el fichero no existe 618 00:26:10,119 --> 00:26:11,299 Abremos con este otro 619 00:26:11,299 --> 00:26:13,259 Y se acabó 620 00:26:13,259 --> 00:26:15,700 Y nada más 621 00:26:15,700 --> 00:26:16,799 Vamos a volver a probarlo 622 00:26:16,799 --> 00:26:18,200 A ver si ahora no nos da ese error 623 00:26:18,200 --> 00:26:20,359 Vamos a borrar el que existía 624 00:26:20,359 --> 00:26:22,160 Porque ese ya está corrupto 625 00:26:22,160 --> 00:26:24,599 El que existía 626 00:26:24,599 --> 00:26:25,799 Vamos a borrarlo 627 00:26:25,799 --> 00:26:33,140 Y 628 00:26:33,140 --> 00:26:36,380 Esto vamos a 629 00:26:36,380 --> 00:26:39,980 vale, cuidado cuando probáis ejecuciones 630 00:26:39,980 --> 00:26:40,779 que tienen menú 631 00:26:40,779 --> 00:26:43,940 y el programa no lo habéis 632 00:26:43,940 --> 00:26:44,940 no habéis salido de él 633 00:26:44,940 --> 00:26:47,920 porque los ficheros a los que esté asociado 634 00:26:47,920 --> 00:26:50,279 se pueden quedar bloqueados 635 00:26:50,279 --> 00:26:52,019 entonces ya no os funciona ni el rename 636 00:26:52,019 --> 00:26:52,759 ni todo eso 637 00:26:52,759 --> 00:26:55,240 entonces 638 00:26:55,240 --> 00:26:57,759 venga, vamos a volver a probarlo 639 00:26:57,759 --> 00:27:05,069 insertamos un destino 640 00:27:05,069 --> 00:27:07,170 de nuevas, cuyo nombre 641 00:27:07,170 --> 00:27:09,269 Madrid y precio 642 00:27:09,269 --> 00:27:11,009 1000, vale 643 00:27:11,009 --> 00:27:12,089 Y vamos a ver si está 644 00:27:12,089 --> 00:27:14,710 Vamos a recuperar 645 00:27:14,710 --> 00:27:16,589 A ver este destino, a ver si está ahí 646 00:27:16,589 --> 00:27:18,089 Está ahí, vale 647 00:27:18,089 --> 00:27:20,289 Ahora insertamos un segundo 648 00:27:20,289 --> 00:27:21,470 Que aquí venía el problema 649 00:27:21,470 --> 00:27:23,390 Vamos a insertar un segundo 650 00:27:23,390 --> 00:27:26,430 Oslo 2000 651 00:27:26,430 --> 00:27:28,089 Vale 652 00:27:28,089 --> 00:27:30,390 Entonces en principio lo ha insertado 653 00:27:30,390 --> 00:27:32,450 Sin colar la cabecera entre medias 654 00:27:32,450 --> 00:27:33,950 Eso es lo que esperamos 655 00:27:33,950 --> 00:27:35,990 Porque lo ha hecho con la clase nueva 656 00:27:35,990 --> 00:27:38,609 Entonces el fichero se habrá quedado bonito 657 00:27:38,609 --> 00:27:39,930 Con la primera cabecera 658 00:27:39,930 --> 00:27:41,650 esa no se ha tocado, la primera original 659 00:27:41,650 --> 00:27:43,549 el fichero de Madrid que ya estaba 660 00:27:43,549 --> 00:27:44,829 el destino, perdón, el objeto 661 00:27:44,829 --> 00:27:47,430 y el siguiente, en principio se ha debido 662 00:27:47,430 --> 00:27:49,690 quedar sin corromper porque al haber añadido 663 00:27:49,690 --> 00:27:51,230 los sin cabecera 664 00:27:51,230 --> 00:27:53,430 se han quedado los objetos uno detrás de otro 665 00:27:53,430 --> 00:27:55,609 sin problema, vamos a ver 666 00:27:55,609 --> 00:27:57,549 si es verdad, vamos a recuperar 667 00:27:57,549 --> 00:27:58,609 el primero de todos 668 00:27:58,609 --> 00:28:01,490 pues sí, vamos a recuperar 669 00:28:01,490 --> 00:28:01,990 el segundo 670 00:28:01,990 --> 00:28:05,329 pues sí, vale 671 00:28:05,329 --> 00:28:07,490 pues arreglado 672 00:28:07,490 --> 00:28:14,170 vale, a ver 673 00:28:14,170 --> 00:28:18,250 ¿qué ocurre? diréis, jo, qué cosa tan rara hemos tenido que hacer 674 00:28:18,250 --> 00:28:21,589 heredar de una clase y hacer una variante, pues sí, es un poco rara 675 00:28:21,589 --> 00:28:24,690 ¿pero por qué? porque estamos trabajando 676 00:28:24,690 --> 00:28:29,569 contra los ficheros como si fuera una base de datos 677 00:28:29,569 --> 00:28:33,710 que es, yo tengo cada objeto que yo voy a insertar 678 00:28:33,710 --> 00:28:37,170 lo inserto directamente en el fichero, cuando voy a recuperar, recupero del fichero 679 00:28:37,170 --> 00:28:40,369 entonces cuando uno trabaja con ficheros, como dijimos el otro día 680 00:28:40,369 --> 00:28:42,369 hasta 681 00:28:42,369 --> 00:28:44,329 10.000, 100.000 682 00:28:44,329 --> 00:28:46,109 bueno, no sé si 100.000 me he pasado 683 00:28:46,109 --> 00:28:47,609 pero unos cuantos miles 684 00:28:47,609 --> 00:28:50,170 no merece la pena trabajar así, es mucho más 685 00:28:50,170 --> 00:28:52,150 sencillo, lees 686 00:28:52,150 --> 00:28:53,450 todo el contenido del fichero 687 00:28:53,450 --> 00:28:55,650 lo vuelcas a una colección 688 00:28:55,650 --> 00:28:57,789 y trabajas con la colección 689 00:28:57,789 --> 00:28:59,910 y ahí ya insertas 690 00:28:59,910 --> 00:29:02,049 guardas, borras, eliminas 691 00:29:02,049 --> 00:29:03,849 lo que quieras, y luego 692 00:29:03,849 --> 00:29:05,930 cuando ya has terminado, toda esa colección 693 00:29:05,930 --> 00:29:07,750 entera va al fichero entero 694 00:29:07,750 --> 00:29:09,109 sobre escribiendo lo que había 695 00:29:09,109 --> 00:29:11,230 Con lo cual ahí no hay problemas 696 00:29:11,230 --> 00:29:12,329 De estar añadiendo 697 00:29:12,329 --> 00:29:14,890 Al fichero 698 00:29:14,890 --> 00:29:16,690 No hay ese problema 699 00:29:16,690 --> 00:29:19,250 ¿Vale? Entonces si trabajamos así 700 00:29:19,250 --> 00:29:20,730 Este tema de la cabecera nos da igual 701 00:29:20,730 --> 00:29:22,630 Que es, cojo 702 00:29:22,630 --> 00:29:25,190 Todos los objetos que hay 703 00:29:25,190 --> 00:29:27,410 Los vuelco enteros a una colección 704 00:29:27,410 --> 00:29:28,789 Trabajo con la colección 705 00:29:28,789 --> 00:29:30,470 Yo olvidándome de ficheros, todo 706 00:29:30,470 --> 00:29:32,390 Insertar, recuperar, lo que quiera 707 00:29:32,390 --> 00:29:35,130 Y ahora ya cuando he acabado y me voy a mi casa 708 00:29:35,130 --> 00:29:36,670 O cuando quiero 709 00:29:36,670 --> 00:29:38,950 Que se refleje en el fichero, cuando quiero 710 00:29:38,950 --> 00:29:40,650 Pum, todo entero 711 00:29:40,650 --> 00:29:43,670 Borrando lo que hubiera 712 00:29:43,670 --> 00:29:44,890 Me da igual, todo entero 713 00:29:44,890 --> 00:29:45,789 Borrando lo que hubiera 714 00:29:45,789 --> 00:29:47,950 Luego ahí no hubiera tenido este problema 715 00:29:47,950 --> 00:29:49,410 ¿Vale? 716 00:29:50,289 --> 00:29:52,109 Y esa es la solución habitual 717 00:29:52,109 --> 00:29:54,390 A menos que uno tenga muchos 718 00:29:54,390 --> 00:29:56,450 Unos cuantos miles de objetos ya 719 00:29:56,450 --> 00:29:57,849 Unos cuantos miles de objetos 720 00:29:57,849 --> 00:30:00,690 ¿Vale? Nosotros lo estamos haciendo así pues 721 00:30:00,690 --> 00:30:02,789 Para verlo 722 00:30:02,789 --> 00:30:04,730 Y porque estamos simulando 723 00:30:04,730 --> 00:30:07,230 Una situación real que es como se trabaja con la base de datos 724 00:30:07,230 --> 00:30:09,569 Con una base de datos no vuelcas la base de datos entera 725 00:30:09,569 --> 00:30:10,990 A una colección 726 00:30:10,990 --> 00:30:12,730 Tú cada vez que quieres hacer algo 727 00:30:12,730 --> 00:30:14,549 Vas directamente a la base de datos 728 00:30:14,549 --> 00:30:16,269 Pues estamos simulando esa forma de trabajar 729 00:30:16,269 --> 00:30:17,009 Que es la real 730 00:30:17,009 --> 00:30:20,829 Vale, pues ya que teníamos ese 731 00:30:20,829 --> 00:30:22,650 Ya que tenemos ese problemilla arreglado 732 00:30:22,650 --> 00:30:26,009 Nuestro insert ya funciona perfectamente 733 00:30:26,009 --> 00:30:27,690 Nuestro get 734 00:30:27,690 --> 00:30:29,089 Pues recupera del fichero 735 00:30:29,089 --> 00:30:30,309 Con el bucle de lectura 736 00:30:30,309 --> 00:30:33,750 Y delete y update 737 00:30:33,750 --> 00:30:35,650 ¿Estos lo teníais hechos? 738 00:30:35,650 --> 00:30:38,809 ¿estáis en ellos? 739 00:30:38,930 --> 00:30:41,009 venga, pues completad delete y update 740 00:30:41,009 --> 00:30:42,630 de destino solamente 741 00:30:42,630 --> 00:30:44,890 ¿qué? delete y update 742 00:30:44,890 --> 00:30:46,849 estos necesitan el famoso 743 00:30:46,849 --> 00:30:48,730 fichero temporal o de maniobras 744 00:30:48,730 --> 00:30:53,269 ¿vale? delete 745 00:30:53,269 --> 00:30:55,569 pues bucle de lectura del original 746 00:30:55,569 --> 00:30:57,069 con cada objeto 747 00:30:57,069 --> 00:30:59,329 decido si lo copio tal cual 748 00:30:59,329 --> 00:31:01,730 o no lo copio, ¿de qué dependerá 749 00:31:01,730 --> 00:31:03,329 que lo copio o no? pues si 750 00:31:03,329 --> 00:31:05,450 el nombre de ese destino es el que quiero 751 00:31:05,450 --> 00:31:07,529 eliminar, no lo copio, si no lo ves lo copio 752 00:31:07,529 --> 00:31:09,990 el de modificar, lo mismo 753 00:31:09,990 --> 00:31:12,210 leo objeto, copio, leo objeto, copio 754 00:31:12,210 --> 00:31:14,069 pero si el que leo 755 00:31:14,069 --> 00:31:16,450 su nombre es este 756 00:31:16,450 --> 00:31:18,410 pues lo copio modificado 757 00:31:18,410 --> 00:31:19,930 con el precio de este 758 00:31:19,930 --> 00:31:22,349 y luego ya borro original 759 00:31:22,349 --> 00:31:23,150 y cambio nombre 760 00:31:23,150 --> 00:31:25,690 vale, pues venga 761 00:31:25,690 --> 00:31:27,470 completad estos dos 762 00:31:27,470 --> 00:31:29,309 y ahora los corregimos