2. ARCHIVO
Un archivo es un conjunto de datos de largo variable
identificado con un nombre. Un nombre de
archivo suele tener dos partes separadas por un punto.
La primera parte alude a su propósito; la segunda, llamada
extensión, indica el tipo de datos que contiene.
Un archivo cuyo nombre termina en “.class” contiene la
definición de una clase Java y el código ejecutable para sus
métodos; un archivo terminado en quot;.javaquot; contiene el texto
del código fuente escrito por el programador. Los
archivos se agrupan en directorios (hoy en día denominados
carpetas).
3. DIRECTORIO
Un directorio es un conjunto de archivos
guardados bajo un nombre común, el
nombre del directorio. Un directorio puede
estar dentro de otro directorio, llamado a v
eces quot;directorio padre”. Se forma así un
árbol de directorios, una organización
jerárquica de directorios y subdirectorios
contenidos en ellos, en varios niveles.
4. RUTA O PATH
La lista ordenada de directorios que lleva
desde la raíz del árbol hasta un archivo
específico se denomina una ruta o en inglé
s quot;pathquot;. Un ejemplo en MS Windows sería
C:Mis DocumentosFHernandezDesaSoft
EntradaSalidaapuntes.pdf
En Unix o Linux,
/home/fhernandez/DesaSoft/EntradaSalida
/apuntes.pdf
5. TIPOS DE ACCESO A
DATOS
Acceso aleatorio (quot;randomquot;): Los archivos de acceso aleatorio, al igual que lo que su
cede usualmente con la memoria (RAM=Random Access Memory), permiten acceder a
los datos en forma no secuencial, desordenada. Esto implica que el archivo debe estar
disponible en su totalidad al momento de ser accedido, algo que no siempre es posible
Acceso secuencial (flujos o quot;streamsquot;): En este caso los datos son leídos secuenci
almente, desde el comienzo del archivo hasta el final (el cual muchas veces no se
conoce a priori).
Este es el caso de la lectura del teclado o la escritura en una consola de texto, no se
sabe cuándo el operador terminará de escribir.
Concatenación (tuberías o quot;pipesquot;): Muchas veces es útil armar conexion
es entre programas que corren simultáneamente dentro de una misma máquina, de
forma que lo que uno produce se envía por un “tubo” para ser recibido por el otro,
que está esperando a la salida del tubo. Las tuberías o quot;pipesquot; cumplen esta función.
6. ENTRADA Y SALIDA
ESTÁNDAR (ESTANDAR I/O)
En sistemas como MS Windows o Unix (incluyend
o Linux), en donde existe el concepto de terminal
o consola de texto, el sistema operativo provee
un mecanismo básico de interacción con el
usuario conectando el flujo de datos proveniente
del teclado a la llamada “entrada estándar” del
programa, mostrando la quot;salida estándarquot; del
programa como texto desplegado en la pantalla.
La entrada estándar y la salida estándar pueden
redireccionarse, haciendo por ejemplo que se lea
de un archivo y se escriba en otro.
7. FLUJOS DE ENTRADA Y
SALIDA
Un flujo de entrada / salida (I/O stream, Input / Output stream)
representa una fuente desde la cual se reciben datos o un
destino hacia el cual se envían datos. Un flujo de datos puede
provenir o dirigirse hacia archivos en disco, dispositivos de
comunicaciones, otros programas o arreglos en memoria. Los
datos pueden ser bytes, tipos primitivos, caracteres propios de
un idioma local, u objetos. Los flujos pueden simplemente
transferir datos sin modificación o manipular esos datos para
transformarlos de diversas maneras como parte del proceso de
transferencia. Sea cual sea el tipo de datos, un flujo se
presenta como una secuencia de datos. Un flujo de entrada (in
put stream) lee datos de una fuente, un item por vez. Un flujo
de salida (output stream) escribe datos en un destino, un item
por vez.
8. FLUJOS DE BYTES
(BYTE STREAMS)
Los flujos de bytes realizan operaciones
de entrada y salida en base a bytes de
8 bits. Todos las clases de flujos de
bytes descienden de las clases
InputStream y OutputStream. Las clases
FileInputStream y FileOutputStream ma
nipulan flujos de bytes provenientes o di
rigidos hacia archivos en disco.
9. FLUJOS DE
CARACTERES
Los flujos de caracteres suelen ser clases
envolventes de los flujos de bytes. Los
flujos de caracteres usan los flujos de
bytes a nivel físico; los flujos de bytes
realizan las transformaciones requeridas
por los esquemas de codificación en forma
transparente (invisible) para el usuario. La
clase FileReader usa FileInputStream, la
clase FileWriter usa FileOutputStream.
10. FLUJO DE CARACTERES
Un buffer es un área de memoria utilizada como almacenamiento
intermedio para mejorar la eficiencia de las operaciones de entrada
salida: escribir o leer de memoria es mucho más rápido que escribir o
leer de dispositivos periféricos. Cuando se usan buffers sólo se lee o
escribe en el dispositivo final cuando el buffer está lleno, reduciendo la
cantidad de operaciones de lectura y escritura sobre los dispositivos
lentos (más lentos que la memoria). Las clases para entrada salida
con buffer son clases envolventes de las clases para entrada salida
sin buffer. Las clases disponibles para entrada salida con buffer son:
BufferedInputStream y BufferedOutputStream para flujos de bytes,
BufferedReader y BufferedWriter para flujos de caracteres. Estas
clases disponen del método flush() para forzar la operación de entrada
salida esté o no el buffer lleno, operación que conviene hacer en
momentos críticos donde puede haber pérdida de información.
11. FLUJO DE DATOS
Los flujos de datos soportan operaciones de e
ntrada salida de datos de tipo primitivo (bool
ean, char, byte, short, int, long, float, y double)
así como cadenas de caracteres (String).
Los flujos de datos implementan la interfaz
DataInput o la interfaz DataOutput. Las
implementaciones más usadas de estas
interfaces son las clases DataInputStream y
DataOutputStream.
12. FLUJO DE OBJETOS
Los flujos de objetos permiten realizar operaciones de entrada salida de objetos. Muc
has de las clases estándar soportan serialización de sus objetos, implementando la
Interfaz Serializable.
La serialización de objetos permite guardar el objeto en un archivo escribiendo sus
datos en un flujo de bytes. Es posible luego leer desde el archivo el flujo de bytes y
reconstruir el objeto original.
Las clases de flujos de objetos son ObjectInputStream y ObjectOutputStream. Estas
clases implementan las interfaces ObjectInput y ObjectOutput, subinterfaces de
DataInput y DataOutput. En consecuencia, todos los métodos de entrada salida que
estaban disponibles para flujos de datos primitivos estarán implementados también
para flujos de objetos.
Si un objeto tiene referencias a objetos de otras clases, los métodos writeObject y
readObject deberán recorrer la jerarquía de clases buscando todo lo necesario para
poder construir el flujo con todos los objetos necesarios. Los objetos guardados se
reconstruyen exactamente como estaban; si existen varias referencias a un mismo
objeto, cuando los objetos sean reconstruidos todas esas referencias seguirán
apuntando al mismo objeto.
13. EL PAQUETE java.io
El examen de la API de Java muestra la complejidad
y variedad de clases contenidas en el paquete
java.io. La visión quot;Treequot; en la API de java.io muestra
la jerarquía de clases.
Algunas otras clases útiles permiten:
Manipular archivos comprimidos en el paquete java.
util.zip: ZipFile, ZipInputStream,
ZipOutputStream), para formato ZIP, y sus equivale
ntes GZIPFile, etc. para formato GZIP, agregar
checksums para detectar errores o alteraciones de
archivos, CheckedInputStream, CheckedOutputSt
ream.