Mostrando entradas con la etiqueta e3. Mostrar todas las entradas
Mostrando entradas con la etiqueta e3. Mostrar todas las entradas

jueves, 29 de marzo de 2007

e3: tamaño incorrecto

> Al cifrar me salen ficheros demasiado grandes. He escrito esto: ..."
> int nDatos = entrada.read(datos);
> while (nDatos > 0) {
> String texto = codificador.codifica(datos);

pues muy mal: sólo puedes codificar "nDatos";
repasa los métodos de la clase base64.Codificador.

> Al descifrar me salen ficheros demasiado grandes. He escrito esto: ..."
> int nDatos = entrada.read(datos);
> while (nDatos > 0) {
> String criptograma = new String(datos);
> String mensaje = descifrador.descifra(criptograma);

pues muy mal: sólo puedes descifrar "nDatos";
repasa los constructores de la clase String.

miércoles, 28 de marzo de 2007

e3: ¿cómo funciona read()?

Con bytes.
Si tenemos un lector de bytes
InputStream in= new FileInputStream("fichero");

necesitamos un sitio donde leer bytes: un array de tamaño T
byte[] datos= new byte[T];

Cada vez que llamamos a "read()" le pasamos el sitio donde queremos cargar bytes
int n= in.read(datos)

"read()" hace 2 cosas
1. carga bytes en el array "datos" (hasta un máximo de T, si lo hay)
2. nos devuelve en "n" cuántos bytes ha logrado cargar

Por eso, si "n <= 0" es que no hay nada que cargar: se ha acabado el fichero.

Y si "n > 0", podemos usar "n" datos: entre las posiciones "0" y "n-1" del array.

"read()" nunca lee dos veces los mismos datos, sino que en cada llamada va
avanzando por el fichero y lee los datos que hay a continuación.
De esta forma, llamando a "read()" dentro de un bucle,
vamos obteniendo los bytes sucesivos que contiene el fichero.

Con caracteres.
Lo mismo, pero cambiando "InputStream" por "Reader"
y "byte[]" por "char[]".