35
Instituto Universitario Politécnico Santiago Mariño Extensión Porlamar Sede Genovés Ingeniería de sistemas (47) Materia: Programación No Numérica II ARCHIVOS EN JAVA Realizado por: Br. Rafael Rojas C.I. 20.326.928 Porlamar Julio 2014

Trabajo sobre archivos en java.. programacion no numerica ii

Embed Size (px)

Citation preview

Page 1: Trabajo sobre archivos en java.. programacion no numerica ii

Instituto Universitario Politécnico Santiago Mariño

Extensión Porlamar Sede Genovés

Ingeniería de sistemas (47)

Materia: Programación No Numérica II

ARCHIVOS EN JAVA

Realizado por:

Br. Rafael Rojas

C.I. 20.326.928

Porlamar Julio 2014

Page 2: Trabajo sobre archivos en java.. programacion no numerica ii

Introducción

Mediante el lenguaje de programación Java se pueden desarrollar diversas

aplicaciones por ser un lenguaje orientado a objetos permite el uso de herencia,

acoplamiento, encapsulamiento, lo que hace posible el desarrollo de diversas

aplicaciones.

Se debe considerar que al desarrollar una aplicación es imprescindible

manejar o por lo mínimo conocer las tareas básicas programables, como son el

uso de archivos, arrays, y por consiguiente la lectura y escritura de los tipos de

datos.

Como todo lenguaje de programación, Java hace uso de librerías y hay que

aplicar ciertas clases necesarias para la ejecución de los programas. Es un

lenguaje de programación de propósito general, concurrente,orientado a

objetos y basado en clases que fue diseñado específicamente para tener tan

pocas dependencias de implementación como fuera posible. Su intención es

permitir que losdesarrolladores de aplicaciones escriban el programa una vez y lo

ejecuten en cualquier dispositivo (conocido en inglés como WORA, o "write once,

run anywhere"), lo que quiere decir que el código que es ejecutado en una

plataforma no tiene que ser recompilado para correr en otra. Java es, a partir de

2012, uno de los lenguajes de programación más populares en uso,

particularmente para aplicaciones de cliente-servidor de web, con unos 10

millones de usuarios reportados. Este lenguaje se denominó inicialmente Oak (por

un roble que había fuera de la oficina de Gosling), luego pasó a

denominarse Green tras descubrir que Oakera ya una marca comercial registrada

para adaptadores de tarjetas gráficas y finalmente se renombró a Java.

.

Page 3: Trabajo sobre archivos en java.. programacion no numerica ii

Entrada y salida de datos en java

Es un intercambio de datos entre el programa y el exterior. La entrada y

salida en java se implementa en el paquete java.io.

La E/S en java se basa en el concepto de flujo, que es una secuencia

ordenada de datos que tienen una fuente (flujos de entrada) o un destino (flujos de

salida). Las clases de E/S aíslan a los programadores de los detalles específicos

del sistema de funcionamiento de la máquina, al tiempo que posibilitan el acceso a

recursos del sistema por medio de ficheros o archivos (files).

Entrada básica: la clase InputStream

La clase abstracta InputStream declara los métodos para leer datos desde

una fuente concreta y es la clase base de la mayor parte de los flujos de entrada

en java.io. Soporta los métodos siguientes:

intread() lee un sólo byte de datos y los devuelve en el rango [0..255].

Devuelve -1 cuando se alcanza el final del flujo y no puede seguir leyendo

bytes.

intread(byte [] buf) lee un array de bytes hasta buf.length. Devuelve el

número de bytes leidos o -1 cuando se llega al final del flujo.

intread(byte [] buf, int off, intlen) lee len bytes del flujo (o los que pueda)

y los coloca a partir de la posición off del array.

longskip(longcount) salta hasta count bytes de entrada o hasta el final del

flujo de entrada, devolviendo el número de bytes saltados.

intavailable() devuelve el número de bytes que están disponibles para

leerse.

voidclose() cierra el flujo de entrada que abrió el constructor no-arg,

liberando los recursos asociados a ese flujo. No es necesario invocar este

método ya que el flujo se cierra cuando se destruye el objeto aunque es

conveniente hacerlo ya que vuelca el buffer sobre el disco.

Page 4: Trabajo sobre archivos en java.. programacion no numerica ii

Salida básica: la clase OutputStream

La clase abstracta OutputStream es análoga a InputStream sólo que

proporciona métodos para manejar el flujo de salida. Los métodos que incluye son:

voidwrite(int b) escribe b como byte, que, aunque sea declarado

como int es transformado a byte. Esto es porque habitualmente es el

resultado de una operación previa.

voidwrite(byte [] buf) escribe un array de bytes.

voidwrite(byte [] buf, int offset, intcount) escribe un array buf de bytes,

empezando en la posición offset y escribiendo count de ellos, deteniéndose

antes si encuentra el final del array.

voidflush() vacía el flujo de modo que los bytes que quedaran por escribir

son escritos.

voidclose() cierra el flujo de salida liberando los recursos asociados a ese

flujo.

A menos que se diga lo contrario estos métodos lanzan una

excepción IOException si detectan algún error en el flujo de salida.

Salida con formato: la clase PrintStream

La clase PrintStream proporciona utilidades para dar formato a la salida.

Tiene dos métodos print y println que están sobrecargados para los tipos

primitivos, objetos, cadenas y arrays de caracteres. La diferencia entre ambos

métodos está en que println añade un carácter de nueva línea. Además el

método println puede llamarse sin argumentos, produciendo una nueva línea.

System.out es una referencia a PrintStream. PrintStream proporciona dos

constructores, ambos con un primer argumento de tipo OutputStream cuya

diferencia está en un segundo argumento booleano que indica si debe vaciar el

flujo con cada carácter de nueva línea.

Page 5: Trabajo sobre archivos en java.. programacion no numerica ii

Clases de java para lectura y escritura de datos

Las jerarquías de clases

En el lenguaje Java los flujos de datos se describen mediante clases que

forman jerarquías según sea el tipo de dato char Unicode de 16 bits o byte de 8

bits. A su vez, las clases se agrupan en jerarquías según sea su función de lectura

o de escritura.

La característica de internacionalización del lenguaje Java es la razón por la

que existe una jerarquía separada de clases para la lectura y escritura de

caracteres.

Todas estas clases se encuentran en el paquete java.io, por lo que al

principio del código fuente se deberá escribir la sentencia

import java.io.*;

Page 6: Trabajo sobre archivos en java.. programacion no numerica ii

Char Unicode, 16 bits

Byte, 8 bits.

Page 7: Trabajo sobre archivos en java.. programacion no numerica ii

Lectura

Las clases Reader e InputStream son similares aunque se refieren a

distintos tipos de datos, lo mismo ocurre con Writer y OutputSream.

Por ejemplo, Reader proporciona tres métodos para leer un carácter char o

un array de caracteres

InputStream proporciona métodos similares para leer un byte o un array de bytes.

int read()

int read(charbuf[])

int read()

int read(bytebuf[])

Page 8: Trabajo sobre archivos en java.. programacion no numerica ii

La primera versión lee un byte como entero del flujo de entrada, devuelve –

1 si no hay más datos que leer. La segunda versión, lee un array de bytes

devolviendo el número de bytes leídos. La tercera versión, lee también, un array

de bytes, pero nos permite especificar, la posición de comienzo del array en la que

se empiezan a guardar los bytes, y el máximo número de bytes que se van a leer.

Escritura

La clase Writer proporciona tres métodos para escribir un carácter char o un array de caracteres

La clase OutputStream proporciona métodos similares

Entrada/Salida estándar (Teclado y Pantalla)

Aquí sólo se tratara la entrada/salida que se comunica con el usuario a

través de la pantalla o de la ventana del terminal.

Si se crea una applet no se utilizarán normalmente estas funciones, ya que

su resultado se mostrará en la ventana del terminal y no en la ventana de

int write(int c)

int write(charbuf[])

int write(charbuf[], int offset, intlen)

int write(int c)

int write(bytebuf[])

int write(bytebuf[], int offset, intlen)

Page 9: Trabajo sobre archivos en java.. programacion no numerica ii

la applet. La ventana de la applet es una ventana gráfica y para poder realizar una

entrada o salida a través de ella será necesario utilizar el AWT.

El acceso a la entrada y salida estándar es controlado por tres objetos que

se crean automáticamente al iniciar la

Aplicación: System.in, System.out y System.err

System.in

Este objeto implementa la entrada estándar (normalmente el teclado). Los

métodos que proporciona para controlar la entrada son:

read(): Devuelve el carácter que se ha introducido por el teclado leyéndolo

del buffer de entrada y lo elimina del buffer para que en la siguiente lectura

sea leído el siguiente carácter. Si no se ha introducido ningún carácter por

el teclado devuelve el valor -1.

skip(n): Ignora los n caracteres siguientes de la entrada.

System.out

Este objeto implementa la salida estándar. Los métodos que proporciona para

controlar la salida son:

print(a): Imprime a en la salida, donde a puede ser cualquier tipo básico

Java, ya que Java hace su conversión automática a cadena.

println(a): Es idéntico a print(a) salvo que con println () se imprime un salto

de línea al final de la impresión de a.

System.err

Este objeto implementa la salida en caso de error. Normalmente esta salida

es la pantalla o la ventana del terminal como con System.out, pero puede ser

Page 10: Trabajo sobre archivos en java.. programacion no numerica ii

interesante redirigirlo, por ejemplo hacia un fichero, para diferenciar claramente

ambos tipos de salidas.

Las funciones que ofrece este objeto son idénticas a las proporcionadas

por System.out.

Entrada/Salida por fichero

Tipos de ficheros

En Java es posible utilizar dos tipos de ficheros (de texto o binarios) y dos

tipos de acceso a los ficheros (secuencial o aleatorio).

Los ficheros de texto están compuestos de caracteres legibles, mientras

que los binarios pueden almacenar cualquier tipo de datos (int, float, boolean,...).

Una lectura secuencial implica tener que acceder a un elemento antes de

acceder al siguiente, es decir, de una manera lineal (sin saltos). Sin embargo los

ficheros de acceso aleatorio permiten acceder a sus datos de una forma aleatoria,

esto es indicando una determinada posición desde la que leer/escribir.

Clases a estudiar

En el paquete java.io existen varias clases de las cuales se pueden crear

instancias de clases para tratar todo tipo de ficheros.

Las tres principales son:

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

Page 11: Trabajo sobre archivos en java.. programacion no numerica ii

aleatorio. Estos ficheros permiten multitud de operaciones; saltar hacia

adelante y hacia atrás para leer la información que sea necesaria en cada

momento, e incluso leer o escribir partes del fichero sin necesidad de

cerrarlo y volverlo a abrir en un modo distinto.

La clase FileInputStream

Mediante los objetos de esta clase se lee 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.

intread(): Devuelve el siguiente carácter del fichero.

intread( byte a[] ): Llena el vector a con los caracteres leídos del fichero.

Devuelve la longitud del vector que se ha llenado si se realizó con éxito o –

1 si no había suficientes caracteres en el fichero para llenar el vector.

intread( byte a[], int off, intlen ): Lee len caracteres del fichero, insertándolos

en el vector a.

Todos ellos devuelven -1 si se ha llegado al final del fichero (momento de

cerrarle).

El siguiente ejemplo muestra el fichero de texto "/carta.txt" en pantalla:

import java.io.*;

classMuestraCarta {

public static void main(String args[]) throws IOException {

int c;

FileInputStream f=new FileInputStream("/carta.txt");

while( ( c=f.read() ) != -1 )

System.out.print( (char)c );

f.close();

}

}

Page 12: Trabajo sobre archivos en java.. programacion no numerica ii

La clase RandomAccessFile

Mediante los objetos de esta clase se utilizan ficheros binarios mediante un

acceso aleatorio, tanto para lectura como para escritura. En estos ficheros hay un

índice que dice en qué posición del fichero se encuentran, y con el que se puede

trabajar para posicionarse en el fichero.

Métodos de escritura

La escritura del fichero se realiza con una función que depende el tipo de

datos que se desee escribir.

voidwrite( byte b[], intini, intlen ); Escribe len caracteres del vector b.

voidwrite(int i ); Escribe la parte baja de i (un byte) en el flujo.

voidwriteBoolean(boolean b ); Escribe el boolean b como un byte.

voidwriteByte(int i ); Escribe i como un byte.

voidwriteBytes(String s ); Escribe la cadena s tratada como bytes, no

caracteres.

voidwriteChar(inti ); Escribe i como 1 byte.

voidwriteChars( String s ); Escribe la cadena s.

voidwriteDouble(double d ); Convierte d a long y le escribe como 8 bytes.

voidwriteFloat(float f ); Convierte f a entero y le escribe como 4 bytes.

voidwriteInt(inti ); Escribe i como 4 bytes.

Page 13: Trabajo sobre archivos en java.. programacion no numerica ii

voidwriteLong( long v ); Escribe v como 8 bytes.

voidwriteShort(inti ); Escribe i como 2 bytes.

voidwriteUTF(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

La lectura del fichero se realiza con una función que depende del tipo de

datos que queremos leer.

booleanreadBoolean(); Lee un byte y devuelve false si vale 0 o true sino.

byte readByte(); Lee y devuelve un byte.

charreadChar(); Lee y devuelve un caracter.

doublereadDouble(); Lee 8 bytes, y devuelve un double.

floatreadFloat(); Lee 4 bytes, y devuelve un float.

voidreadFully( byte b[] ); Lee bytes del fichero y los almacena en un

vector b.

voidreadFully( byte b[], intini, intlen ); Lee len bytes del fichero y los

almacena en un vector b.

intreadInt(); Lee 4 bytes, y devuelve un int.

longreadLong(); Lee 8 bytes, y devuelve un long.

shortreadShort(); Lee 2 bytes, y devuelve un short.

intreadUnsignedByte(); Lee 1 byte, y devuelve un valor de 0 a 255.

intreadUnsignedShort(); Lee 2 bytes, y devuelve un valor de 0 a 65535.

Page 14: Trabajo sobre archivos en java.. programacion no numerica ii

StringreadUTF(); Lee una cadena codificada con el formato UTF-8.

intskipBytes(int n); Salta n bytes del fichero.

Si no es posible la lectura devuelven –1.

Serialización

Para que un programa java pueda convertir un objeto en un montón de bytes y pueda luego recuperarlo, el objeto necesita ser Serializable. Al poder convertir el objeto a bytes, ese objeto se puede enviar a través de red, guardarlo en un fichero, y después reconstruirlo al otra lado de la red, leerlo del fichero.

Para que un objeto sea serializable basta con que implemente la interfaz Serializable. Como la interfaz Serializable no tiene métodos, es muy sencillo implementarla, basta con unimplementsSerializable y nada más. Por ejemplo, la clase Datos siguiente es Serializable y java sabe perfectamente enviarla o recibirla por red, a través de socket o de rmi. También java sabe escribirla en un fichero o reconstruirla a partir del fichero.

Si dentro de la clase hay atributos que son otras clases, éstos a su vez también deben ser Serializable. Por ejemplo

//Esta clase es Serializable porque implementa Serializable y todos sus campos son Serializable, incluido "Datos f;"

public class Datos implements Serializable

{

publicint a;

   public String b;

   public char c;

}

Page 15: Trabajo sobre archivos en java.. programacion no numerica ii

Lectura de un archivo en un servidor de internet

La clase básica para esto es URL. Con ella se indica la dirección web del fichero y se establace la conexión.

Si no se sabe el tipo de fichero que tiene el enlace, se puede preguntar a la clase URLConnection. Desde luego, el tipo de fichero es totalmente anecdótico, puesto que el método aquí expuesto vale para cualquier tipo de fichero, incluidos los html.

public class DatoGordo implements Serializable

{

   publicint d;

   publicInteger e;

   Datos f;

}

import java.net.URL;

importjava.net.URLConnection;

...

try {

URL url = new URL("http://mas.lne.es/fotos/img/2007/10/62/203093470447035b9bc5a095.43783284-foto_verano.jpg"); URLConnectionurlCon = url.openConnection(); ...} catch (Exception e) {

...

// Esto saca por pantalla "image/jpeg"

System.out.println(urlCon.getContentType());

Page 16: Trabajo sobre archivos en java.. programacion no numerica ii

Para acceder al contenido y descargarlo en un fichero local, pedimos a URLConnection el getInputStream() y lo vamos leyendo y escribiendo en un fichero local hasta el final

Java Foundation Classes (JFC) y Java 2D

Las Java FoundationClasses (JFC, en castellano Clases Base Java) son un

framework gráfico para construir interfaces gráficas de usuario portables basadas

en Java. JFC se compone de Abstract Window Toolkit (AWT), Swing y Java

2D.Juntas, suministran una interfaz de usuario consistente para programas Java,

tanto si el sistema de interfaz de usuario subyacente es Windows, Mac OS

X o Linux.

AWT es la más antigua de las dos APIs de interfaz, y fue criticada

duramente por ser poco más que una envoltura alrededor de las capacidades

gráficas nativas de la plataforma anfitrión. Esto significa que los widgets estándar

en la AWT confían en esas capacidades de los widgets nativos, requiriendo que el

desarrollador también este prevenido de las diferencias entre plataformas anfitrión.

Una API de gráficos alternativa llamada Internet FoundationClasses fue

desarrollada en código más independiente de la plataforma por Netscape.

Últimamente, Sun mezcló la IFC con otras tecnologías bajo el nombre "Swing",

añadiendo la capacidad para un look and feel enchufable de los widgets. Esto

permite a los programas Swing mantener la base del código independiente de la

plataforma, pero imita el look de la aplicación nativa.

En computación, Java 2D es un API para dibujar gráficos en dos

dimensiones usando el lenguaje de programación Java. Cada operación de dibujo

Java 2D puede tratarse como rellenar una forma usando

un pincel y componiendo el resultado en la pantalla.

Page 17: Trabajo sobre archivos en java.. programacion no numerica ii

Una forma en Java 2D es un límite infinitamente delgado el cual define un

interior y un exterior. Los Píxeles internos de la forma están afectados por la

operación de dibujo, los que están fuera no.

Java Media Framework (JMF)

JMF es una API que sirve para incluir multimedia en las aplicaciones de

Java, funciona básicamente, recibiendo el contenido multimedia de alguna fuente,

para después procesarlo y entregarlo en alguna salida multimedia.

La manera más sencilla de poner un reproductor en una applet es utilizando

el MediaPlayerBean.

Se instancia un Media Player, asi:

Para decirle al player que archivo se quiere reproducir se utilizala siguiente línea:

Para iniciar, detener o pausar la reproducción, se usan las siguientes líneas respectivamente:

Java 3D

La API (ApplicationProgram Interface) Java3D es una interfaz de

programación utilizada para realizar aplicaciones y applets con gráficos en tres

dimensiones. Proporciona a los desarrolladores un alto nivel para crear y

MediaPlayer player = new javax.media.bean.playerbean.MediaPlayer():

player.setMediaLocation(dirección del archivo);

player.start();

player.close();

player.stop();

Page 18: Trabajo sobre archivos en java.. programacion no numerica ii

manipular objetos geométrios 3D y para construir las estructuras utilizadas en el

renderizado de dichos objetos. Se pueden describir grandes mundos virtuales

utilizando estos constructores, que proporcionan a Java3D la suficiente

información para hacer un renderizado de forma eficiente.

Algunos objetivos importantes de Java3D son:

Proporcionar un amplio conjunto de utilidades que permitan crear mundos

en 3D interesantes.

Proporcionar un paradigma de programación orientado a objeto de alto nivel

para permitir a los desarrolladores generar sofisticadas aplicaciones y

applets de forma rápida.

Proporcionar soporte a cargadores en tiempo de ejecución. Esto permite

que Java3D se adapte a un gran número de formatos de ficheros, como

pueden ser formatos específicos de distintos fabricantes de CAD, formatos

de intercambio o VRML 1.0 (Virtual RealityModellingLanguage) y VRML 2.0.

Las aplicaciones en Java3D construyen los distintos elementos gráficos

como objetos separados y los conectan unos con otros mediante una estructura

en forma de árbol denominada grafo de escena. La aplicación manipula los

diferentes objetos utilizando los métodos de acceso, de modificación y de unión

definidos en su interfaz.

Java Beans

Los JavaBeans son un modelo de componentes creado por Sun

Microsystems para la construcción de aplicaciones en Java.Se usan para

encapsular varios objetos en un único objeto (la vaina o Bean en inglés), para

hacer uso de un solo objeto en lugar de varios más simples.

La especificación de JavaBeans de Sun Microsystems los define como

"componentes de software reutilizables que se puedan manipular visualmente en

una herramienta de construcción".

Page 19: Trabajo sobre archivos en java.. programacion no numerica ii

A pesar de haber muchas semejanzas, los JavaBeans no deben

confundirse con los Enterprise JavaBeans (EJB), una tecnología de componentes

del lado servidor que es parte de Java EE.

Dentro de un JavaBean podemos distinguir tres partes:

Propiedades: Los atributos que contiene.

Métodos: Se establecen los métodos get y set para acceder y modificar los

atributos.

Eventos: Permiten comunicar con otros JavaBeans.

Ejemplo:

publicclassPersonaBean

implementsjava.io.Serializable {

private String nombre;

privateintedad;

publicPersonaBean() {

// Constructor sin argumentos

}

publicvoidsetNombre(String n) {

this.nombre = n;

}

publicvoidsetEdad(int e) {

this.edad = e;

}

Page 20: Trabajo sobre archivos en java.. programacion no numerica ii

RMI Y JAVA IDL

RMI (Java RemoteMethodInvocation) es un mecanismo ofrecido

por Java para invocar un método de manera remota. Forma parte del entorno

estándar de ejecución de Java y proporciona un mecanismo simple para la

comunicación de servidores en aplicaciones distribuidas basadas exclusivamente

en Java. Si se requiere comunicación entre otras tecnologías debe

utilizarse CORBA o SOAP en lugar de RMI.

RMI se caracteriza por la facilidad de su uso en la programación por estar

específicamente diseñado para Java; proporciona paso de objetos por referencia

(no permitido por SOAP), recolección de basura distribuida (GarbageCollector

distribuido) y paso de tipos arbitrarios (funcionalidad no provista por CORBA).

A través de RMI, un programa Java puede exportar un objeto, con lo que

dicho objeto estará accesible a través de la red y el programa permanece a la

espera de peticiones en un puerto TCP. A partir de ese momento, un cliente puede

conectarse e invocar los métodos proporcionados por el objeto.

La invocación se compone de los siguientes pasos:

Encapsulado (marshalling) de los parámetros (utilizando la funcionalidad

de serialización de Java).

Invocación del método (del cliente sobre el servidor). El invocador se queda

esperando una respuesta.

Al terminar la ejecución, el servidor serializa el valor de retorno (si lo hay) y

lo envía al cliente.

El código cliente recibe la respuesta y continúa como si la invocación

hubiera sido local.

La arquitectura RMI puede verse como un modelo de cuatro capas.

Primera capa:

Page 21: Trabajo sobre archivos en java.. programacion no numerica ii

La primera capa es la de aplicación y se corresponde con la

implementación real de las aplicaciones cliente y servidor. Aquí tienen lugar las

llamadas a alto nivel para acceder y exportar objetos remotos. Cualquier

aplicación que quiera que sus métodos estén disponibles para su acceso por

clientes remotos debe declarar dichos métodos en una interfazque extienda

java.rmi.Remote. Dicha interfaz se usa básicamente para "marcar" un objeto como

remotamente accesible. Una vez que los métodos han sido implementados, el

objeto debe ser exportado. Esto puede hacerse de forma implícita si el objeto

extiende la clase UnicastRemoteObject (paquete java.rmi.server), o puede

hacerse de forma explícita con una llamada al método exportObject() del mismo

paquete.

Segunda capa:

La capa 2 es la capa proxy, o capa stub-skeleton. Esta capa es la que

interactúa directamente con la capa de aplicación. Todas las llamadas a objetos

remotos y acciones junto con sus parámetros y retorno de objetos tienen lugar en

esta capa.

Tercera capa:

La capa 3 es la de referencia remota, y es responsable del manejo de la

parte semántica de las invocaciones remotas. También es responsable de la

gestión de la replicación de objetos y realización de tareas específicas de la

implementación con los objetos remotos, como el establecimiento de las

persistencias semánticas y estrategias adecuadas para la recuperación de

conexiones perdidas. En esta capa se espera una conexión de tipo stream

(stream-orientedconnection) desde la capa de transporte.

Cuarta Capa:

La capa 4 es la de transporte. Es la responsable de realizar las conexiones

necesarias y manejo del transporte de los datos de una máquina a otra. El

Page 22: Trabajo sobre archivos en java.. programacion no numerica ii

protocolo de transporte subyacente para RMI es JRMP (Java

RemoteMethodProtocol), que solamente es "comprendido" por programas Java.

Elementos

Toda aplicación RMI normalmente se descompone en 2 partes:

Un servidor, que crea algunos objetos remotos, crea referencias para

hacerlos accesibles, y espera a que el cliente los invoque.

Un cliente, que obtiene una referencia a objetos remotos en el servidor, y

los invoca.

Java IDL

Java IDL o Java Interface DescriptionLanguage es una implementación

CORBA que permite que dos objetos interactúen sobre diferentes plataformas a

través de una red. Java IDL al ser una interfaz permite que los objetos interactúen

sin importar el lenguaje en que estén escritos, a diferencia de Java RMI que solo

soporta objetos distribuidos escritos en Java.

Esto se logra ya que Java IDL está basado en

CommonObjectRequestBrokerageArchitecture (CORBA), un estándar para objetos

distribuidos. CORBA fue definido y está controlado por el Object Management

Group (OMG) que define las APIs, el protocolo de comunicaciones y los

mecanismos necesarios para permitir la inter operatividad entre diferentes

aplicaciones escritas en diferentes lenguajes y ejecutadas en diferentes

plataformas, lo que es fundamental en computación distribuida.

Para soportar la interacción entre objetos de programas separados, Java

IDL proporciona un ObjectRequestBroker (ORB) que es una biblioteca de clases

que permite una comunicación de bajo nivel entre aplicaciones Java IDL y

aplicaciones compatibles con CORBA.

Page 23: Trabajo sobre archivos en java.. programacion no numerica ii

Java Native Interface (JNI)

Java Native Interface (JNI) es un framework de programación que permite

que un programa escrito en Java ejecutado en la máquina virtual java (JVM)

pueda interactuar con programas escritos en otros lenguajes como C, C++ y

ensamblador.

El JNI se usa para escribir métodos nativos que permitan solventar

situaciones en las que una aplicación no puede ser enteramente escrita en Java,

como por ejemplo en el caso de que la biblioteca estándar de clases no

proporcione soporte para funcionalidades dependientes de la plataforma.

También se usa para modificar programas existentes escritos en algún otro

lenguaje, permitiéndoles ser accesibles desde aplicaciones Java. Muchas de las

clases de la API estándar de Java dependen del JNI para proporcionar

funcionalidad al desarrollador y al usuario, por ejemplo las funcionalidades de

sonido o lectura/escritura de ficheros. El desarrollador debe asegurarse que la API

estándar de Java no proporciona una determinada funcionalidad antes de recurrir

al JNI, ya que la primera ofrece una implementación segura e independiente de la

plataforma.

El framework JNI permite a un método nativo utilizar los objetos Java de la

misma forma en que el propio código de Java lo hace. Un método nativo puede

crear objetos Java; y examinarlos y utilizarlos para que lleven a cabo su función.

Un método nativo puede asimismo examinar y utilizar objetos que han sido

creados por código de aplicación escrito en Java.

A menudo se denomina a JNI como la "válvula de escape" para

desarrolladores dado que les permite añadir funcionalidades a sus aplicaciones

que el API de Java no puede proporcionar.

Dado que -como se ha dicho antes- puede ser usado para interactuar con

código escrito en otros lenguajes como C++, también se usa para operaciones y

Page 24: Trabajo sobre archivos en java.. programacion no numerica ii

cálculos de alta complejidad temporal, porque el código nativo es por lo general

más rápido que el que se ejecuta en una máquina virtual.

Page 25: Trabajo sobre archivos en java.. programacion no numerica ii

Conclusión

El lenguaje de programación Java tiene aplicaciones que se comunican con

la máquina virtual del mismo, y con el sistema operativo, lo cual permite a los

programadores desentenderse de la compatibilidad con el hardware. Java crea

procesos que funcionan en multitud de dispositivos.Muchos de los sitios Web y

aplicaciones no funcionan a menos que Java esté instalado. Java es rápido,

seguro y fiable. Posee un componente del entorno de ejecución que permite

ejecutar en diversos navegadores. El lenguaje de programación Java, fue

diseñado por la compañía Sun Microsystems Inc, con el propósito de crear un

lenguaje que pudiera funcionar en redes computacionales heterogéneas ( redes

de computadoras formadas por más de un tipo de computadora, ya sean PC,

MAC's, estaciones de trabajo),y que fuera independiente de la plataforma en la

que se vaya a ejecutar. Esto significa que un programa de Java puede ejecutarse

en cualquier máquina o plataforma. El lenguaje fue diseñado con las siguientes

características en mente:El sistema de Java maneja la memoria de la

computadora por ti. No te tienes que preocupar por apuntadores, memoria que no

se esté utilizando. Java realiza todo esto sin necesidad de que uno se lo indique.El

sistema de Java tiene ciertas políticas que evitan se puedan codificar virus con

este lenguaje. Portable, el código compilado de Java (conocido como byte code)

es interpretado, un programa compilado de Java puede ser utilizado por cualquier

computadora que tenga implementado el interprete de Java. Al compilar un

programa en Java, el código resultante un tipo de código binario conocido como

byte code. Este código es interpretado por diferentes computadoras de igual

manera, solamente hay que implementar un intérprete para cada plataforma. De

esa manera Java logra ser un lenguaje que no depende de una arquitectura

computacional definida. Es un lenguaje que soporta múltiplesthreads es un

lenguaje que puede ejecutar diferentes líneas de código al mismo tiempo.

Page 26: Trabajo sobre archivos en java.. programacion no numerica ii

Dinámico. Java no requiere que compiles todas las clases de un programa para que este funcione. Si realizas una modificación a una clase Java se encarga de realizar un DynamicBynding o un DynamicLoading para encontrar las clases.

Java puede funcionar como una aplicación sola o como un "applet", que es un pequeño programa hecho en Java. Los applets de Java se pueden "pegar" a una página de Web (HTML), y con esto puedes tener un programa que cualquier persona que tenga un browser compatible podrá usar.

Page 27: Trabajo sobre archivos en java.. programacion no numerica ii

Referencias Electrónicas

www.miprimercodigo.com/2012/04/entrada-y-salida-de-datos-en-java/

darkbyteblog.wordpress.com/.../java-flujos-de-datos-entrada-y-salida-est...

https://www.fdi.ucm.es/profesor/jpavon/poo/2.13.EntradaySalida.pdf

http://chuwiki.chuidiang.org/index.php?title=Serializaci

%C3%B3n_de_objetos_en_java

es.wikipedia.org/wiki/Java_Foundation_Classes

www.programacion.com/articulo/java_3d_169