Ejercicios de entrada/salida en Java
Entrada/salida byte a byte
- Modifique el programa de copia de manera que si recibe un único
argumento escriba el fichero que corresponde a ese primer y único
argumento en System.out. Gracias a la independencia
del dispositivo que ofrece la abstración de stream, no
habrá ningún cambio en el bucle de copia, ya que, como se verá más adelante,
System.out pertenece a una clase derivada de OutputStream.
- Modifique el programa de copia de manera que si el primer argumento comienza
por http: lo considere la dirección de un recurso web y use la clase
URL, concretamente, el stream asociado a la misma, para acceder a
dicho recurso.
- Desarrolle un programa, denominado extraer, que copie una
porción de un fichero en otro. El programa recibirá cuatro argumentos:
fichero origen, fichero destino, posición en el fichero origen del primer
byte a copiar, número de bytes a copiar.
- Realice un programa, llamado pegar, que reciba como argumentos
N ficheros de entrada y 1 de salida, de manera que el programa
concatenará sucesivamente el contenido de los ficheros de entrada
en el de salida.
- Programe una aplicación, de nombre romper, que reciba
como argumentos el nombre de un fichero F y un número N, y que
genere tantos ficheros de salida como sean necesarios, de manera que cada
fichero de salida, excepto el último, tenga un tamaño de N
bytes y nombres sucesivamente F_0, F_1, etc.
- Defina una clase derivada de InputStream tal que cada
vez que se lea de la misma devuelva siempre el mismo valor, que se le
habrá especificado en el constructor. Desarrolle un programa de prueba
que reciba como argumentos un entero V con un valor entre 0 y 255,
un tamaño T y el nombre de un fichero, de forma que el
programa cree un fichero del nombre indicado con un tamaño T
y tal que todos sus bytes tengan el valor V.
- Pruebe el programa de copia original usando un fichero de entrada muy
grande. Compruebe el bajo rendimiento del mismo. Modifíquelo para usar
las operaciones read y write que manejan vectores
de bytes, usando un tamaño de 1024.
Usando filtros
- Añada filtros de buffering al programa de copia que realizaba la
operación byte a byte. Compare su rendimiento con la versión original sin
buffering y con la versión que usa vectores de bytes.
- Se pretende desarrollar una aplicación de cifrado basada en las siguientes clases:
- CifraOutputStream: clase derivada de FilterOutputStream
que aplica cifrado a los datos que recibe. En su constructor, además del stream interceptado,
recibirá un número que se usará de clave para el cifrado. El algoritmo de cifrado
consistirá en restar ese número a todo byte que se escribe.
- DescifraInputStream: Clase derivada de FilterInputStream
que realiza el descifrado de los
datos que recibe. En su constructor, además del stream interceptado,
recibirá un número que se usará de clave para el descifrado. El algoritmo de descifrado
consistirá en sumar ese número a todo byte que se lee.
- Cifra: Programa que recibe como argumentos el nombre del fichero a cifrar, el
del fichero cifrado y la clave. Se debe usar como
base el programa de copia, que sólo cambiará en el uso
del filtro CifraOutputStream.
- Descifra: Programa que recibe como argumentos el nombre del fichero a descifrar, el
del fichero descifrado y la clave. Se debe usar como
base el programa de copia, que sólo cambiará en el uso
del filtro DescifraInputStream.