|
Buscador
Secciones
Otras zonas
Registro
Foros
Recomendamos
|
Luego, CheckedDataOutput declara una variable privada para contener un objeto DataOutput. private DataOutput out; Este es el objeto en el se escribirán los datos. El constructor para CheckedDataOutput es diferente del constructor de CheckedOutputStream: CheckedDataOutput se crea sobre un objeto DataOutput en vez sobre un objeto OutputStream.
public CheckedDataOutput(DataOutput out, Checksum cksum) {
this.cksum = cksum;
this.out = out;
}
Este constructor no llama a super(out) como hacía el constructor de CheckedOutputStream. Esto es porque CheckedDataOutput desciende de Object en vez de la clase stream. Aquí están las únicas modificaciones echas a CheckedOutputStream para crear un filtro que funcione sobre objetos DataOutput.
|
|
Nota:
Para mantener el ejemplo sencillo, la clase CheckedDataInput realmente proporcionada en esta sección no está declarada para implementar DataInput, porque el interface DataInput especifica demasiados métodos. Sin embargo, la clase CheckedDataInput proporcionada en el ejemplo implementa varios métodos de DataInput para ilustrar como deberían funcionar. |
Además de estos cambios, el método read también se ha modificado. El CheckedInputStream del ejemplo original implementa dos métodos read, uno para leer un sólo byte y otro para leer un array de bytes. El interface DataInput teine métodos que implementan la misma funcionalidad, pero tienen diferentes nombres y firmas de métodos. Así el método read de la clase CheckedDataInput tiene nuevos nombres y firmas de métodos.
public byte readByte() throws IOException {
byte b = in.readByte();
cksum.update(b);
return b;
}
public void readFully(byte[] b) throws IOException {
in.readFully(b, 0, b.length);
cksum.update(b, 0, b.length);
}
public void readFully(byte[] b, int off, int len)
throws IOException
{
in.readFully(b, off, len);
cksum.update(b, off, len);
}
Los Programas PrincipalesFinalmente, este ejemplo tiene dos programas principales para probar los nuevos filtros. CheckedDITest, que ejecuta el filtro sobre ficheros de acceso secuencial (objetos DataInputStream y DataOutputStream), y CheckedRAFTest, que ejecuta los filtros sobre ficheros de acceso aleatorio (objetos RandomAccessFiles).
Estos dos programas se diferencian sólo en el tipo del objeto que abren para el filtro. CheckedDITest crea un DataInputStream y un DataOutputStream y usa el filtro checksum sobre ellos, como en el siguiente código:
cis = new CheckedDataInput(
new DataInputStream(new FileInputStream("farrago.txt")),
inChecker);
cos = new CheckedDataOutput(
new DataOutputStream(new FileOutputStream("outagain.txt")),
outChecker);
CheckedRAFTest crea dos RandomAccessFiles, uno para leer y uno para escribir, y usa el filtro checksum sobre ellos.
cis = new CheckedDataInput(
new RandomAccessFile("farrago.txt", "r"),
inChecker);
cos = new CheckedDataOutput(
new RandomAccessFile("outagain.txt", "rw"),
outChecker);
Cuando ejecutemos cualquiera de estos programas deberíamos ver la siguiente salida:
Input stream check sum: 736868089 Output stream check sum: 736868089
| Leer comentarios (39) | |
| Escribir comentario | |
| Puntuación: |
|
| Votar | |
| Recomendar este tutorial | |
| Estadísticas |
Copyright © 1999-2007
Programación en castellano.
Todos los derechos reservados.
Formulario de Contacto -
Datos legales -
Publicidad
Hospedaje web y servidores dedicados linux por Ferca Network
red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados