Beruflich Dokumente
Kultur Dokumente
Universidad de
Guadalajara CUCI.
Profesores:
José Sandoval Chávez
Karime Pulido Hernández
Mireya Cacho Ruiz
Norma Alicia Gómez Torres
Oscar Galileo García García
[MANUAL DE TALLER DE
ESTRUCTURA DE ARCHIVOS]
[ALUMNO: ]
[02]
[CONTENIDO]
MODULO 1: La información como un flujo de bits
José Sandoval Chávez, Karime Pulido Hernández, Mireya Cacho Ruiz, Norma Alicia Gómez Torres, Oscar Galileo García García
[03]
[MODULO 1]
LA INFORMACIÓN COMO FLUJO DE BITS
[04]
Java maneja 5 tipos de datos básicos de los cuales se desprenden otros, la siguiente tabla muestra el tipo
de datos, el rango y su peso en bytes.
Tipo Descripción
boolean Tiene dos valores true o false.
Caracteres Unicode de 16 bits Los caracteres alfa-numéricos son los mismos que los ASCII con el bit alto puesto a 0. El intervalo de valores va
char
desde 0 hasta 65535 (valores de 16-bits sin signo).
Int Tamaño 32 bits. El intervalo de valores va desde -2147483648 a 2147483647
float Tamaño 32 bits. Números en coma flotante de simple precisión. Estándar IEEE 754-1985 (de 1.40239846e–45f a 3.40282347e+38f)
Void No tiene tamaño. Este tipo de dato permite definir funciones vacias, es decir que no devuelven algún valor
Es posible cambiar el tipo de dato de un valor realizando una conversión o casting de la siguiente manera:
int i = (int)‟A‟; // esto ofrece un valor entero 65, ya que este es el valor binario de la letra „A‟ (0100 0001)
José Sandoval Chávez, Karime Pulido Hernández, Mireya Cacho Ruiz, Norma Alicia Gómez Torres, Oscar Galileo García García
[05]
Operadores a nivel de bit y desplazamiento de bit
El lenguaje de programación Java también proporciona operadores que proporcionan operaciones de a nivel
de bit y de desplazamiento de bit en tipos enteros. Los operadores tratados en esta sección son de uso poco
común. Por tanto su cobertura es breve, el objetivo es simplemente hacer constar que estos operadores existen.
El operador complemento a nivel de bit «~» invierte un patrón de bits; se puede aplicar a cualquiera de los tipos
enteros, haciendo de cada «0» un «1» y de cada «1» un «0». Por ejemplo, un byte contiene 8 bits; al aplicar este
operador a un valor cuyo patrón de bits es «00000000» éste se cambiaría a «11111111».
El operador de desplazamiento a la izquierda con signo «<<» desplaza un patrón de bits a la izquierda, y el
operador de desplazamiento a la derecha con signo «>>» desplaza un patrón de bits a la derecha. El patrón de
bits viene dado por el operando de la izquierda y el número de posiciones por el operando de la derecha. El
operador de desplazamiento a la derecha sin signo «>>>» desplaza un cero hacia la posición más a la izquierda,
mientras que la posición más a la izquierda después del «>>» dependa de la extensión de signo.
El operador a nivel de bits & realiza una operación de AND a nivel de bits.
El operador a nivel de bits ^ realiza una operación de OR exclusivo (XOR) a nivel de bits.
Práctica 1: Realice un programa que represente información utilizando operaciones a nivel de bits.
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
5.- ¿Qué operador se utiliza para revisar si una posición de un Byte esta en 0 o 1?
______________________________________________________________________________________________________
José Sandoval Chávez, Karime Pulido Hernández, Mireya Cacho Ruiz, Norma Alicia Gómez Torres, Oscar Galileo García García
[07]
[MODULO 2]
ESTRUCTURA DE REGISTROS
En la lectura de ficheros de texto, lo primero que tenemos que hacer es crear un Reader de tipo fichero. Esto es
encapsulado en la clase FileReader. Será esta clase la que utilice el buffer como origen de lectura.
O en un formato mas “técnico” podríamos irnos a tener una sola linea de codigo:
Ahora solo nos queda es ir leyendo del fichero. Para ello utilizaremos los métodos de BufferedReader. Y en
concreto el que nos va dando línea a línea readLine(), La lectura se hará de forma repetitiva hasta que la
lectura de la línea sea nula.
José Sandoval Chávez, Karime Pulido Hernández, Mireya Cacho Ruiz, Norma Alicia Gómez Torres, Oscar Galileo García García
[09]
Hay que tener especial cuidado con el manejo de las excepciones. Todo manejo con la librería java.io nos hará
estar expuestos al manejo de la excepción IOException.
Y tampoco podemos olvidar que a la hora de realizar la lectura de un fichero, este, no exista. En ese caso se
lanzará una excepción FileNotFoundException.
Para crear un archivo de texto se utilizan las mismas clases, solo cambia el reader por write.
Ahora solo nos queda es escribir unos textos dentro del archivo. Para ello utilizaremos los métodos de
BufferedWriter. Y en concreto el que nos va a permitir escribir una línea write().
Práctica 2: Realice un programa que procese un archivo de texto, recuerda estudiar la clase String.
[10]
Estructura de registros:
Un campo corresponde con un componente básico de información, muchas veces se relaciona con un atributo
de un objeto, mientras que un registro corresponde con una colección de campos que pueden ser del mismo o
de diferentes tipos, este suele asociarse con un objeto.
José Sandoval Chávez, Karime Pulido Hernández, Mireya Cacho Ruiz, Norma Alicia Gómez Torres, Oscar Galileo García García
Ejemplo para los registros:
[11]
Nombre: ANA Apellidos: ROSALES MENDEZ Edad: 23 Localidad: OCOTLAN
Práctica 3: Realice los programas que tomen n registros y los representen en cada una de las 6 estructuras.
[12]
Preguntas & Respuestas
______________________________________________________________________________________________________
______________________________________________________________________________________________________
2.- Porqué se utilizo la clase Buffered para la lectura y escritura de archivos de texto
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
José Sandoval Chávez, Karime Pulido Hernández, Mireya Cacho Ruiz, Norma Alicia Gómez Torres, Oscar Galileo García García
[13]
[MODULO 3]
CLASES PARA MANEJO DE ARCHIVOS
FileOutputStream: Fichero de salida de texto. Representa ficheros de texto para escritura a los que se
accede de forma secuencial.
FileInputStream: Fichero de entrada de texto. Representa ficheros de texto de sólo lectura a los que se
accede de forma secuencial.
RandomAccessFile: Fichero de entrada o salida binario con acceso aleatorio. Es la base para crear los
objetos de tipo fichero de acceso aleatorio. Estos ficheros permiten multitud de operaciones; saltar hacia
delante y hacia atrás para leer la información que necesitemos en cada momento, e incluso leer o
escribir partes del fichero sin necesidad de cerrarlo y volverlo a abrir en un modo distinto.
José Sandoval Chávez, Karime Pulido Hernández, Mireya Cacho Ruiz, Norma Alicia Gómez Torres, Oscar Galileo García García
[15]
Para tratar con un fichero siempre hay que actuar de la misma manera:
1. Se abre el fichero.
Para ello hay que crear un objeto de la clase correspondiente al tipo de fichero que vamos a manejar, y el tipo
de acceso que vamos a utilizar:
Donde ruta es la ruta de disco en que se encuentra el fichero o un descriptor de fichero válido.
Este formato es válido, excepto para los objetos de la clase RandomAccessFile (acceso aleatorio), para los que
se ha de instanciar de la siguiente forma:
Donde modo es una cadena de texto que indica el modo en que se desea abrir el fichero; "r" para sólo lectura o
"rw" para lectura y escritura.
2. Se utiliza el fichero.
[16]
Para ello cada clase presenta diferentes métodos de acceso para escribir o leer en el fichero.
Se puede observar que todos los métodos que utilicen clases de este paquete deben tener en su definición una
cláusula throws IOException. Los métodos de estas clases pueden lanzar excepciones de esta clase (o sus hijas)
en el transcurso de su ejecución, y dichas excepciones deben de ser capturadas y debidamente gestionadas
para evitar problemas. se destruye el objeto.
Para cerrar un fichero lo que hay que hacer es destruir el objeto. Esto se puede realizar de dos formas, dejando
que sea el recolector de basura de Java el que lo destruya cuando no lo necesite (no se recomienda) o
destruyendo el objeto explícitamente mediante el uso del procedimiento close() del objeto:
obj.close()
José Sandoval Chávez, Karime Pulido Hernández, Mireya Cacho Ruiz, Norma Alicia Gómez Torres, Oscar Galileo García García
La clase FileOutputStream [17]
Mediante los objetos de esta clase escribimos en ficheros de texto de forma secuencial.
La clase FileInputStream
Mediante los objetos de esta clase leemos de ficheros de texto de forma secuencial.
Presenta el método read() para la lectura del fichero. Este método se puede invocar de varias formas.
[18]
La clase RandomAccessFile
Mediante los objetos de esta clase utilizamos ficheros binarios mediante un acceso aleatorio, tanto para lectura
como para escritura. En estos ficheros hay un índice que nos dice en qué posición del fichero nos encontramos,
y con el que se puede trabajar para posicionarse en el fichero.
Métodos de desplazamiento
Cuenta con una serie de funciones para realizar el desplazamiento del puntero del fichero. Hay que tener en
cuenta que cualquier lectura o escritura de datos se realizará a partir de la posición actual del puntero del
fichero.
José Sandoval Chávez, Karime Pulido Hernández, Mireya Cacho Ruiz, Norma Alicia Gómez Torres, Oscar Galileo García García
[19]
Métodos de escritura
La escritura del fichero se realiza con una función que depende el tipo de datos que se desee escribir.
void write( byte b[], int ini, int len ); Escribe len caracteres del vector b.
void write( int i ); Escribe la parte baja de i (un byte) en el flujo.
void writeBoolean( boolean b ); Escribe el boolean b como un byte.
void writeByte( int i ); Escribe i como un byte.
void writeBytes( String s ); Escribe la cadena s tratada como bytes, no caracteres.
void writeChar( int i ); Escribe i como 1 byte.
void writeChars( String s ); Escribe la cadena s.
void writeDouble( double d ); Convierte d a long y le escribe como 8 bytes.
void writeFloat( float f ); Convierte f a entero y le escribe como 4 bytes.
void writeInt( int i ); Escribe i como 4 bytes.
void writeLong( long v ); Escribe v como 8 bytes.
void writeShort( int i ); Escribe i como 2 bytes.
void writeUTF( String s ); Escribe la cadena s utilizando la codificación UTF-8.
Los métodos que escriben números de más de un byte escriben el primero su parte alta.
Métodos de lectura
[20]
La lectura del fichero se realiza con una función que depende del tipo de datos que queremos leer.
José Sandoval Chávez, Karime Pulido Hernández, Mireya Cacho Ruiz, Norma Alicia Gómez Torres, Oscar Galileo García García
[21]
Preguntas & Respuestas
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
4.- Clase y método que permite la lectura y escritura de valores de tipo long.
______________________________________________________________________________________________________
______________________________________________________________________________________________________
[22]
[MODULO 4]
BUSQUEDA Y CLASIFICACIÓN DE ARCHIVOS
José Sandoval Chávez, Karime Pulido Hernández, Mireya Cacho Ruiz, Norma Alicia Gómez Torres, Oscar Galileo García García
[23]
Búsqueda binaria en java
Recordar que para que funcione correctamente los valores del arreglo deben estar ordenados.
insbinaria(int A[],int N)
{ int aux,izq,der,m=0,j;
for (int i=1;i<N;i++)
{
aux=A[i]; izq=0; der=i-1;
while(izq<=der)
{ m=(int)((izq+der)/2); if (aux<=A[m]) der=m-1; else izq=m+1; } // fin del while (izq<=der)
j=i-1;
while(j>=izq){ A[j+1]=A[j]; j=j-1; }
A[izq]=aux;
System.out.println("PASADA "+i);
for (int k=0; k<N; k++) System.out.print(A[k]+",");
System.out.println();
} // fin del for (int i=1;i<N;i++)
José Sandoval Chávez, Karime Pulido Hernández, Mireya Cacho Ruiz, Norma Alicia Gómez Torres, Oscar Galileo García García
[25]
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
3.- ¿La inserción binaria en que parte del arreglo va dejando los elementos ordenados?
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
[26]
[MODULO 5]
DISPERSIÓN O HASH
José Sandoval Chávez, Karime Pulido Hernández, Mireya Cacho Ruiz, Norma Alicia Gómez Torres, Oscar Galileo García García
Función de dispersión
[27]
El hashing o dispersión consta de datos de entrada, una función hash y una salida. Esta función calcula un
código específico para un dato de entrada (como puede ser un nombre, por ejemplo). El valor calculado
puede parecer aleatorio, pero no lo es, ya que las operaciones para computar la salida son siempre las mismas.
La función hash asocia siempre la misma salida para una entrada determinada. Por ejemplo:
hash(“Martín”) = 5432
hash(“Martín”) = 5432
La salida de la función hash es siempre un número, este número depende exclusivamente de la entrada porque
las operaciones se realizan sobre estos. Pero la pregunta que nos hacemos es ¿para qué queremos asignarle un
código a un dato de entrada (como ser un nombre)? La respuesta es que este número lo podemos usar para
almacenar ese dato en la posición indicada.
Entonces vamos a almacenar en la posición 1234 la cadena “Pedro”, además de sus datos personales, por
ejemplo. Cuando se quiera buscar “Pedro” no hace falta recorrer todo el archivo. Calculamos la función hash a
este nombre y accedemos a la posición del arreglo que nos indica la salida de la función.
Ejemplo:
Se tiene el registro cuya llave es “LOPEZ < 7 espacios >” y se tienen direcciones de 0 a 99
76 79 80 69 90 32 32 32 32 32 32 32
Paso 1: L O P E Z < 7 espacios >
Paso 3: 14476 % 101 = 33 // se tomo 101 ya que es el numero primo más cercano a la derecha de 100!
Por dispersión dos llaves pueden ser enviadas a la misma dirección, por lo que ocurren colisiones.
Práctica 6: Aplique la dispersión a un archivo de n registros y visualice las colisiones que se producen.
José Sandoval Chávez, Karime Pulido Hernández, Mireya Cacho Ruiz, Norma Alicia Gómez Torres, Oscar Galileo García García
[29]
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
4.- ¿Por qué se aplica modulo 20000 a las sumas intermedias en el segundo paso?
______________________________________________________________________________________________________
5.- ¿Por qué usar el residuo de una división entre un número primo?
______________________________________________________________________________________________________
[COMENTARIOS]
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
José Sandoval Chávez, Karime Pulido Hernández, Mireya Cacho Ruiz, Norma Alicia Gómez Torres, Oscar Galileo García García