mientras que los archivos binarios se leen mediante un programa que convierte esos datos en un formato legible para
los humanos.
• Java también puede asociar los fl ujos con distintos dispositivos. Tres objetos fl ujo se asocian con dispositivos cuando
un programa de Java empieza a ejecutarse:
System.in
,
System.out
y
System.err
.
•
El
paquete
java.io
incluye defi niciones para las clases de fl ujos, como
FileInputStream
(para la entrada basada
en bytes de un archivo),
FileOutputStream
(para la salida basada en bytes hacia un archivo),
FileReader
(para la en-
trada basada en caracteres de un archivo) y
FileWriter
(para la salida basada en caracteres hacia un archivo). Los
archivos se abren creando objetos de estas clases de fl ujos.
Sección 14.4 La clase
File
•
La
clase
File
se utiliza para obtener información acerca de los archivos y directorios.
• Las operaciones de entrada y salida basadas en caracteres se pueden llevar a cabo con las clases
Scanner
y
Formatter
.
•
La
clase
Formatter
permite mostrar datos con formato en la pantalla, o enviarlos a un archivo, de una manera
similar a
System.out.printf
.
• La ruta de un archivo o directorio especifi ca su ubicación en el disco.
• Una ruta absoluta contiene todos los directorios, empezando con el directorio raíz, que conducen hacia un archivo
o directorio específi co. Cada archivo o directorio en una unidad de disco tiene el mismo directorio raíz en su ruta.
• Por lo general, una ruta relativa empieza desde el directorio en el que se empezó a ejecutar la aplicación.
• Un carácter separador se utiliza para separar directorios y archivos en la ruta.
Sección 14.5 Archivos de texto de acceso secuencial
• Java no impone una estructura en un archivo; las nociones como los registros no existen como parte del lenguaje de
Java. El programador debe estructurar los archivos para satisfacer los requerimientos de una aplicación.
• Para obtener datos de un archivo en forma secuencial, los programas comúnmente empiezan a leer desde el principio
del archivo y leen todos los datos en forma consecutiva, hasta encontrar la información deseada.
• Los datos en muchos archivos secuenciales no se pueden modifi car sin el riesgo de destruir otros datos en el archivo.
Por lo tanto, los registros en un archivo de acceso secuencial normalmente no se actualizan directamente en su ubi-
cación. En vez de ello, se vuelve a escribir el archivo completo.
Sección 14.6 Serialización de objetos
•
Java cuenta con un mecanismo llamado serialización de objetos, el cual permite escribir o leer objetos com-
pletos mediante un fl ujo.
•
Un objeto serializado es un objeto que se representa como una secuencia de bytes, e incluye los datos del
objeto, así como información acerca del tipo del objeto y los tipos de datos almacenados en el mismo.
•
Una vez que se escribe un objeto serializado en un archivo, se puede leer del archivo y deserializarse; es decir,
se puede utilizar la información de tipo y los bytes que representan al objeto para recrearlo en la memoria.
•
Las clases
ObjectInputStream
y
ObjectOutputStream
, que implementan en forma respectiva a las interfaces
ObjectInput
y
ObjectOutput
, permiten leer o escribir objetos completos de/a un fl ujo (posiblemente un
archivo).
•
Sólo las clases que implementan a la interfaz
Serializable
pueden serializarse y deserializarse con objetos
ObjectOutputStream
y
ObjectInputStream
.
Sección 14.7 Clases adicionales de
java.io
•
La
interfaz
ObjectOutput
contiene el método
writeObject
, el cual recibe un objeto
Object
que implementa a la
interfaz
Serializable
como argumento y escribe su información en un objeto
OutputStream
.
•
La
interfaz
ObjectInput
contiene el método
readObject
, que lee y devuelve una referencia a un objeto
Object
de un objeto
InputStream
. Una vez que se ha leído un objeto, su referencia puede convertirse al tipo actual del
objeto.
• El uso de búfer es una técnica para mejorar el rendimiento de E/S. Con un objeto
BufferedOutputStream
, cada
instrucción de salida no necesariamente produce una transferencia física real de datos al dispositivo de salida. En vez
de ello, cada operación de salida se dirige hacia una región en memoria llamada búfer, la cual es lo bastante grande
como para contener los datos de muchas operaciones de salida. La transferencia actual al dispositivo de salida se
realiza entonces en una sola operación de salida física extensa cada vez que se llena el búfer.
• Con un objeto
BufferedInputStream
, muchos trozos “lógicos” de datos de un archivo se leen como una sola opera-
ción de entrada física extensa y se colocan en un búfer de memoria. A medida que un programa solicita cada nuevo
trozo de datos, se obtiene del búfer. Cuando el búfer está vacío, se lleva a cabo la siguiente operación de entrada física
real desde el dispositivo de entrada, para leer el nuevo grupo de trozos “lógicos” de datos.
Resumen
645
14_MAQ_CAP_14_DEITEL.indd645
4/19/081:28:26AM