Conceptos Esenciales de Programación Java: Archivos, Serialización, Concurrencia y J2ME
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 56,6 KB
I. Preguntas Conceptuales (50 Puntos)
Según lo visto en clase, escoja la opción correcta o responda:
- (5 puntos) El manejo de archivos en disco duro permite implementar el manejo de memoria volátil en una máquina. V() F(X)
- (5 puntos) ¿Qué tipos de Streams maneja el sistema de archivos de Java? Tipo byte y tipo carácter.
- (5 puntos) Mencione dos formas de acceder a la información almacenada en un archivo. Forma Secuencial y forma Aleatoria (o Random).
- (5 puntos) ¿Se puede actualizar la información de un archivo de objetos serializados de forma directa sobre el mismo archivo? V() F(X).
- (5 puntos) ¿Qué es un objeto serializado? Es un objeto real convertido en una secuencia de bytes.
- (5 puntos) ¿Cuál es la importancia de usar buffers en el acceso a archivos? Obtener un mejor rendimiento en el intercambio de información entre la memoria y los periféricos.
- (5 puntos) ¿Para qué se usa la clase
File
en el trabajo con archivos? Para abrir en abstracto un determinado archivo, con miras a investigarlo. Así se evitan problemas al procesarlo. - (5 puntos) Mencione dos restricciones de seguridad en la ejecución de Applets:
- Un applet solo puede comunicarse con el servidor de donde se descarga.
- Un applet no tiene libre acceso al sistema de archivos local donde se ejecuta.
- (5 puntos) ¿Dónde se ejecuta un Applet Java? En el cliente, usando su navegador habilitado para Java.
- (5 puntos) Mencione los métodos de ejecución automática en un Applet.
init()
,start()
,stop()
,destroy()
.
II. Manejo de Objetos Serializados: Visualización de Productos (35 Puntos)
Suponga que cuenta con el archivo productos1.data
, el cual reside en el disco duro y en el directorio de trabajo. Dicho archivo fue creado en un proceso previo en Java y contiene información de objetos serializados de la clase Producto
:
public class Producto implements java.io.Serializable {
public String nombre;
long codigo;
public Producto(String nom, long cod) {
nombre = nom;
codigo = cod;
}
public void mostrar(){
System.out.println("Nombre: " + nombre);
System.out.println("Código: " + codigo);
}
}
CODIFIQUE UN PROGRAMA JAVA TIPO APLICACIÓN para mostrar por pantalla la información de los productos.
TENGA EN CUENTA LO SIGUIENTE:
- No investigue los archivos a manipular.
- No use buffers con los archivos a manipular.
Solución:
import java.io.*;
public class MostrarProductos {
public static void main(String arg[])
throws FileNotFoundException, IOException, ClassNotFoundException {
FileInputStream fis = new FileInputStream("productos1.data");
ObjectInputStream ois = new ObjectInputStream(fis);
// Creado el canal de comunicaciones con los archivos
// procedemos a la lectura de Objetos Producto
// Creamos una variable booleana
boolean masObjetos = true;
while( masObjetos) {
try {
// Leemos un objeto de la clase Producto
Object o = ois.readObject();
Producto p = (Producto) o;
// MOSTRAMOS SU INFORMACIÓN
p.mostrar();
System.out.println("\n\n");
} catch (EOFException e) {
masObjetos = false;
}
}
// Cerramos los archivos abiertos
ois.close();
fis.close();
}
}
III. Manejo de Archivos Serializados: Filtrado y Creación de Nuevo Archivo (60 Puntos)
Asuma que en su directorio actual dispone del archivo datosProducto
, el cual fue creado en un proceso previo con objetos serializados de la siguiente clase:
public class Producto implements java.io.Serializable {
public String nombre;
public int existencias;
public Producto(String nom, int exis){
nombre = nom;
existencias = exis;
}
}
Elabore un programa Java para crear UN NUEVO ARCHIVO con la información de los objetos almacenados en el archivo datosProducto
que NO HAN AGOTADO SUS EXISTENCIAS.
NOTA: El programa Java es tipo aplicación y sin usar sistema gráfico.
import java.io.*;
public class ActualizarArchivoConObjetos {
public static void main(String arg[])
throws Exception {
FileInputStream fis = new FileInputStream("datosProducto");
ObjectInputStream ois = new ObjectInputStream(fis);
FileOutputStream fos = new FileOutputStream("nuevoProducto");
ObjectOutputStream oos = new ObjectOutputStream(fos);
// Creamos una variable booleana
boolean masObjetos = true;
while( masObjetos){
try {
// Leemos un objeto de la clase Producto
Object o = ois.readObject();
Producto e = (Producto) o;
String name = e.nombre; // Acceso directo al campo
int exis = e.existencias; // Acceso directo al campo
if( exis != 0){
Producto p = new Producto(name, exis); // Se crea un nuevo objeto Producto
oos.writeObject(p); // Se escribe el objeto 'p', no 'e1'
}
} catch (EOFException e) {
masObjetos = false;
}
}
// Cerramos los archivos abiertos
oos.close();
fos.close();
ois.close();
fis.close();
}
}
IV. Conceptos Fundamentales de J2ME (20 Puntos)
- (2) Una configuración J2ME define una máquina virtual. V() F(X)
- (2) Un perfil incrementa la funcionalidad de una configuración. V(X) F()
- (2) ¿Qué significa CLDC? Connected Limited Device Configuration (Configuración de dispositivos limitados conectados).
- (2) ¿Qué significa MIDP? Mobile Information Device Profile (Perfil de dispositivos de información móvil).
- (2) Defina MIDlet. Aplicaciones Java realizadas con el perfil MIDP sobre la configuración CLDC.
- (2) La preverificación de MIDlets se realiza dentro del móvil. V() F(X)
- (4) ¿Cuáles son los métodos de ejecución automática en un MIDlet?
startApp()
,pauseApp()
ydestroyApp()
. - (4) ¿Cuáles clases constituyen un Screen?
List
,TextBox
,Alert
yForm
.
V. Programación Concurrente con Hilos en Java (20 Puntos)
- (3) Defina hilo en programación Java. Los hilos son contextos de programación que permiten implementar la programación concurrente en Java.
- (3) ¿Cuál es la importancia de trabajar con hilos? La importancia de trabajar con hilos radica en que permite implementar que un determinado trozo de código en un programa Java pueda ser ejecutado simultáneamente por diferentes contextos de programación llamados hilos (threads).
- (3) ¿Cuáles son las constantes para manejar prioridades con hilos Java?
MAX_PRIORITY
,NORM_PRIORITY
yMIN_PRIORITY
. - (5) ¿Cuál es el papel del método
run()
en el trabajo con hilos? Contiene el código Java a ejecutar de forma concurrente por los hilos. - (6) ¿Cómo se define en Java un hilo para trabajar en la modalidad CLASE CON MÉTODO COMPARTIDO?
Thread hilo = new Thread("nombreDelHilo") { public void run() { // Aquí se invocan los métodos compartidos // para este hilo en particular } };
Conceptos Adicionales de Programación Java
Invocación de Métodos en Java
- El control de ejecución se traslada al método invocado.
- Se activa la parte de la memoria RAM correspondiente al stack; se reservan las áreas para parámetros y variables locales.
- Cuando el método ejecuta
return
, el control de ejecución retorna al punto de llamada y se libera el stack.
En Java, la información al momento de invocar un método, la información de los parámetros se pasa por valor.
Listas Ligadas y Manejo de Punteros (Referencias) en Java
Las listas ligadas son una implementación en Java del manejo de direcciones de memoria para implementar el manejo de apuntadores.
Manejo de punteros (referencias): no se mueve información, se mueven punteros.
Forma de Trabajo:
- Crear una clase con la información (Variables de Instancia - V.I.), Métodos, Constructores (Cons).
- Crear una clase con los procesos a realizar con el nodo de información.
- Crear una clase que los use.
Archivos Tradicionales (Planos) Orientados a Bytes
- Para crear:
FileOutputStream
;DataOutputStream
(para escribir datos primitivos) ywrite()
. - Para procesar (leer):
FileInputStream
;DataInputStream
(para leer datos primitivos) yread()
.
Acceso secuencial: por secuencia, asigna un puntero.
Acceso aleatorio (Random): ubicar el puntero en cualquier parte (lectura; escritura).
Objetos Serializados en Disco Duro (HDD)
Para crear (proceso de apertura del stream de salida):
File f = new File(args[0]);
FileOutputStream fos = new FileOutputStream(f);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(objeto); // Donde 'objeto' es el objeto a serializar
Sintaxis de constructor: ObjectOutputStream(FileOutputStream f)
Proceso de lectura:
File f = new File(args[0]);
FileInputStream fis = new FileInputStream(f);
ObjectInputStream ois = new ObjectInputStream(fis);
Object objLeido = ois.readObject(); // Se lee un objeto
Sintaxis de constructor: ObjectInputStream(FileInputStream f)
// En la serialización de objetos, el acceso es secuencial.
Hilos (Threads) en Java
public class Thread implements Runnable
public interface Runnable { public void run(); }
El método run()
implementa el código Java a ser ejecutado concurrentemente por todos los hilos (objetos de la clase Thread
) que se arrancan asociados a clases que se derivan de Thread
.
Manejo de Hilos con Método Compartido (Genérico)
public class MiClase [extends ClaseBase] [implements Interfaz] {
// Variables de Instancia (VI); Constructores (CS)
public TipoRetorno m1(...) { /* Lógica */ };
public TipoRetorno m2(...) { /* Lógica */ };
}
En otra clase que va a trabajar con hilos sobre MiClase
:
public class OtraClaseConHilos {
// Variables de Instancia (VI); Constructores (CS); Métodos (MTDS)
public static void main(String[] args) {
Thread h1 = new Thread("nombreHilo1") {
public void run() {
MiClase miObjeto1 = new MiClase(...);
miObjeto1.m2(...);
miObjeto1.m3(...);
}
};
Thread h2 = new Thread("nombreHilo2") {
public void run() {
MiClase miObjeto2 = new MiClase(...);
miObjeto2.m1(...);
miObjeto2.m3(...);
}
};
// Iniciar hilos: h1.start(); h2.start();
}
}
Clase Timer
en Swing
Permite la ejecución de forma asíncrona de un trozo de código Java en un determinado intervalo de tiempo.
Timer t = new Timer(intervalo, manejadorDeEventos);
t.start();
Invocación al Sistema Operativo en Java
Clases: Runtime
, Process
.