Está en la página 1de 96

Laboratorio Nacional de Informtica Avanzada A. C.

JAVA II

Academias de Teleinformtica SEV


2007

Programacin en Java
Modulo 10: Construccin de GUI
Laboratorio Nacional de Informtica Avanzada A. C. 2007

Abstract Window Toolkit AWT


Provee componentes grficas de usuario (GUI) que son utilizadas en aplicaciones Contiene clases que pueden ser extendidas y usar las propiedades heredadas. Todos los componentes de GUI nacen de dos clases abstractas Component o MenuComponent Tiene a Container, el cul es una subclase abstracta de Component que incluye: Panel Windows
LANIA 2007 3

El paquete java.awt

LANIA 2007

Contenedores
Es un espacio que almacena componentes Los componentes se agregan con el mtodo add(). Los dos principales tipos de contenedores son Window y Panel Un Window es una ventana que flota en la pantalla Un Panel es un contenedor que debe existe en el contexto de otro contenedor como una Ventana.

LANIA 2007

Frames
Son una subclase de ventanas Tienen un ttulo y sus esquinas pueden cambiar de tamao Inicialmente son invisibles

LANIA 2007

Frames
public static void main(String[] args) { // TODO code application logic here Frame miFrame = new Frame("Hola Mundo"); miFrame.setSize(300,300 ); miFrame.setVisible(true); }

LANIA 2007

Panel
Provee un espacio para componentes Ayuda que a otros paneles puedan tener sus propios atributos como su administrador de plantilla (layout)

LANIA 2007

El entorno Swing
El principal problema de AWT es que su apariencia dependa de la arquitectura sobre la que se ejecutaba. Swing est programado en Java puro. De esta forma las aplicaciones se vern idnticas no importando el sistema operativo. Swing se apoya en AWT
LANIA 2007 9

JFrames
public static void main(String[] args) { // TODO code application logic here JFrame miFrame = new JFrame("Hola Mundo"); miFrame.setSize(300,300 ); miFrame.setVisible(true); }

LANIA 2007

10

Manejadores de capas (Layout Manager)


Los contenedor almacenan componentes La manera en como se almacenan depende del manejador de capas que se est utilizando Los manejadores de ventanas ayudan a mantener un formato los componentes Se utiliza el mtodo setLayout([LAYOUT]);
LANIA 2007 11

El manejador FlowLayout
Es el ms sencillo que vamos a encontrar y es el est por defecto en los Jpanel. Los componentes de van aadiendo lnea a lnea Si la lnea se llena se crea una nueva y se empieza a llenar. Los constructores son: FlowLayout(); FlowLayout(int aligment) FlowLayout(int aligment, int hgap, int vgap) El parmetro aligment tiene los valores FlowLayout.LEFT FlowLayout.RIGHT FlowLayout.CENTER
12

LANIA 2007

Ejemplo de un FlowLayout
public static void main(String[] args) { // TODO code application logic here JFrame a = new JFrame(); a.setLayout(new FlowLayout()); a.add(new JButton("OK")); a.add(new JButton("CANCEL")); a.add(new JButton("HOLA")); a.add(new JButton("Adios")); a.add(new JButton("Centro")); a.pack(); a.setVisible(true); }
LANIA 2007 13

Comportamiento

LANIA 2007

14

BorderLayout
Es el administrador por defecto de los Jframes. Divide la pantalla en cinco partes:

LANIA 2007

15

BorderLayout
Los componentes situados en las zonas North y South se expanden todo el ancho necesario Posteriormente las zonas East y West ocupan toda la altura que quede disponible Por ltimo la zona Center ocupar el resto Constructores: public BorderLayout() public BorderLayout(int hgap, int vgap)

LANIA 2007

16

Ejemplo
public static void main(String[] args) { // TODO code application logic here JFrame a = new JFrame(); a.setLayout(new BorderLayout()); a.add(new JButton("OK"),BorderLayout.NORTH); a.add(new JButton("CANCEL"),BorderLayout.SOUTH); a.add(new JButton("HOLA"),BorderLayout.EAST); a.add(new JButton("Adios"),BorderLayout.WEST); a.add(new JButton("Centro"),BorderLayout.CENTER); a.pack(); a.setVisible(true); } LANIA 2007

17

Comportamiento

LANIA 2007

18

GridLayout
Este administrador establece un sistema de filas y columnas permitiendo poner un componente dentro de cada casilla. No debemos indicar la posicin del componente. Se aaden secuencialmente

Constructores: Public GridLayout(int rows, int cols) Public GridLayout(int rows, int cols, int hgap, int vgap)
LANIA 2007 19

Ejemplo
public static void main(String[] args) { // TODO code application logic here JFrame a = new JFrame(); a.setLayout(new GridLayout(2,3)); a.add(new JButton("OK")); a.add(new JButton("CANCEL")); a.add(new JButton("HOLA")); a.add(new JButton("Adios")); a.add(new JButton("Centro")); a.pack(); a.setVisible(true); }
LANIA 2007 20

Comportamiento

LANIA 2007

21

Programacin en Java
Modulo 11: Manejo de Eventos
Laboratorio Nacional de Informtica Avanzada A. C. 2007

Conceptos bsicos
Un evento se produce cuando un usuario realiza una accin a nivel de la interfaz grfica
Pulsa un botn Mueve el mouse en una regin Pulsa una tecla

Los eventos son objetos que describen lo que sucede


LANIA 2007 23

Eventos
Existen una gran variedad de clases de eventos para describir las diferentes categoras de acciones de usuario

LANIA 2007

24

Event source
Event source es el generador de un evento Pulsar un componente Jbutton con el ratn genera un evento de tipo ActionEvent con el botn como source. La instancia ActionEvent es un objeto que contiene informacin sobre los eventos que acaban de ocurrir. Sus mtodos publc getActionCommand(): retorna el nombre del comando asociado con la accin public getModifiers(): retorna los modificadores capturados durante la accin que ha generado el evento

LANIA 2007

25

Gestor de eventos
Un gestor de eventos (event handler) es un mtodo que recibe un objeto evento Un gestor de eventos es cualquier clase que herede de AWTEvent

LANIA 2007

26

Modelo de delegacin
Los eventos se enva al componente que los ha originado Cada componente debe tener registradas una o ms clases llamadas escuchas (listeners) Los listeners contienen gestores de eventos que pueden recibir y procesar un evento El gestor de eventos puede estar en un objeto totalmente separado del componente

LANIA 2007

27

Proceso de creacin de Eventos


Creamos el componente
Jbutton btnOK = new Jbutton(OK);

Registramos de manejador de eventos con el mtodo addActionListener()


btnOK.addActionListener(new btnOKActionListener())

Damos la funcionalidad al administrador crendolo a travs de una interfaz tipo listener


LANIA 2007

public class btnOKActionListener() implements ActionListener

28

Ejemplo
import javax.swing.*; public class Pulsame extends JFrame{ private JButton btnOK; /** Creates a new instance of Pulsame */ public Pulsame() { super("Plsame"); btnOK = new JButton("OK"); btnOK.addActionListener(new btnOKActionListener()); add(btnOK); pack(); setVisible(true); } }

LANIA 2007

29

Ejemplo
import java.awt.event.*; public class btnOKActionListener implements ActionListener{ private int contador = 0; public void actionPerformed(ActionEvent e) { contador++; System.out.println("El botn ha sido pulsado "+contador +" veces"); }
LANIA 2007

30

Programacin en Java
Modulo 12: Aplicaciones basadas en GUI Laboratorio Nacional de Informtica Avanzada A. C. 2006

Swing
La interfaz Swing es el GUI que nos ofrece Java que consta de 9 paquetes con centenares de clases e interfaces La clase javax.swing.Jcomponent es la clase superior de toda la jerarqua de clases swing.

LANIA 2007

32

ndice visual Contenedores de alto nivel en la jerarqua

Contenedores de propsito general

LANIA 2007

33

Contenedores de propsito especial

ndice visual

LANIA 2007

34

Controles bsicos

ndice visual

JButton

LANIA 2007

35

ndice visual
Pantallas no editables

LANIA 2007

36

ndice visual
Pantallas editables o informacin formateada

LANIA 2007

37

Componentes relevantes de swing


JFrame JPanel Canvas JButton JLabel JTextField JTextArea JCheckBox JRadioButton y ButtonGroup JComboBox JList Menes

LANIA 2007

38

JFrame
Una JFrame es la clase que representa la ventana en la que se ejecutan las aplicaciones grficas en Java. El procedimiento usual es crear una clase nueva que herede de JFrame.. Normalmente los JFrames se utilizan como contenedores primarios, es decir, no estn contenidos dentro de otros contenedores. A un frame se le suele poner un panel principal a partir del cual se organizan los dems elementos. Para colocar este panel principal se usa el mtodo: public void setContentPane(Cantainer contentPane)
LANIA 2007 39

JPanel
Un JPanel es una ventana invisible sobre las que se sitan y organizan los elementos en la ventana. Podemos insertar cualquier tipo de componentes dentro de un panel, incluyendo otros paneles. Esta facilidad se hace imprescindible a la hora de crear interfaces grficas complejas en las que haya que usar diferentes Layout Managers El procedimiento habitual para poner un panel consiste en construirlo primero, aadir los componentes que se desee y luego se insertarlo en el contenedor adecuado. Consta de ms de 293 mtodos heredados de JComponent, Container y Component, aparte de los heredados de Object. De entre todas estas operaciones, destacaremos las siguientes heredadas de Container: public JPanel(): constructora; public JPanel(LayoutManager layout): crea un nuevo JPanel con el administrados de diseo que se le pasa; public Component add(Component comp): es el mtodo usado para aadir componentes al panel. Devuelve el mismo componente que se le pasa; public setLayout(Layout Manager l): establece el administrador de diseo dado; public void remove(Component c): elimina el componente
40

LANIA 2007

Canvas
Un Canvas es una tela rectangular en la que pintamos el texto o dibujos lo que queremos. Funciona exactamente como un JPanel (aunque no es un contenedor). Este objeto se puede utilizar para las tcnicas de doble buffering para evitar los efectos de parpadeo, pintando primero sobre los canvas y luego aadiendo los canvas a la pantalla una vez que ya estn construidos. Una vez hemos dibujado el Canvas slo hemos de aadirlo como cualquier otro componente. El mtodo en el que programaremos lo que queremos dibujar siempre ser public void paint(Graphics g)
LANIA 2007 41

JButton
Son componentes que generan un evento cuando pulsamos sobre ellos. Una de las principales caractersticas de los JButton es que admiten que su contenido sea texto y/o Imgenes Algunos mtodos a destacar son:
public JButton(String texto): crea un botn con el texto dado en su interior; public JButton(Icon icono): crea un botn con el icono en su interior; public String getLabel(): devuelve la etiqueta del botn; public void setLabel(String label): establece una nueva etiqueta; public void setEnabled(boolean b): si b es false el botn quedar deshabilitado y no podr ser pulsado.
42

LANIA 2007

JLabel
Es un rea que permite mostrar un String, una imagen o ambos. Una JLabel (etiqueta) no reacciona a los eventos del usuario por lo que no puede obtener el focus del teclado. Se suele utilizar en combinacin con otros componentes que no disponen de la capacidad de mostrar su finalidad; por ejemplo, en combinado con un JTextField nos servira para indicar al usuario qu esperamos que introduzca en el mismo. Algunos mtodos importantes son:
public JLabel(String texto): crea una etiqueta con el texto dado; public JLabel(Icon icono): la crea con un icono; public JLabel(String text, int alineacionHorizontal): crea una etiqueta con un texto y una alineacin dados. sta ltima puede ser LEFT, CENTER, RIGHT,LEADING o TRAILING definidas en el interfaz SwingConstants; public void setText(String texto): establece la el texto que mostrar; public String getText(): devuelve el texto; public Icon getIcon(): devuelve el icono. LANIA 2007 43

JTextField
El JTextField es un campo de texto de una sola lnea. Hereda de la clase javax.swing.text.JTextComponent. Entre sus mtodos destacamos los siguientes:
public JTextField(int numCols): crea un JtextField que ocupa numCols columnas. Si el texto que contiene sobrepasa este tamao no se perder aunque no se pueda mostrar todo simultneamente; public JTextField(String texot, int numCols): igual que el anterior pero adems presentar un texto inicial; public void setFont(Font fuente): establece la fuente con la que se mostrar el texto; public String getText(): retorna su contenido; public String getSelectedText(): retorna el texto seleccionado en su interior; public void copy(): copia el texto seleccionado al portapapeles de sistema; public void cut(): igual que el anterior pero adems elimina el texto seleccionado; public void setEditable(boolean b): habilita o inhabilita la posibilidad de LANIA 2007 cambiar el texto contenido. 44

Ejemplo

LANIA 2007

45

Resultado

LANIA 2007

46

JTextArea
Es un campo de texto que admite un nombre indeterminado de filas y columnas. Podemos escribir en l todo lo que queramos, ya que si nos pasamos de las dimensiones que muestra, aparecen barras de desplazamiento para poder mostrar toda el rea de texto. Hereda de la clase javax.swing.JTextComponent igual que el JTextField por lo que, quitando las constructoras, tambin podremos aplicarle todos los mtodos comentados para el JTextField. Otros mtodos interesantes son:
public JTextArea(): crea una nueva rea de texto con 0 filas y columnas; public JTextArea(int filas, int columnas): la crea con el nmero de filas y colummnas dados; public JTextArea(String texto, int filas, int columnas): igual que el anterior pero con un texto inicial; public int getRows(): devuelve el nmero de filas; public int getColumns(): devuelve el nmero de columnas; public void append(String texto): concatena el texto al final del texto ya existente en la JTextArea; public void insert(String texto, int posicion): inserta el texto en la posicin especificada
47

LANIA 2007

JCheckBox
Es un componente que puede estar seleccionado o no y que muestra su estado. Por convencin puede estar seleccionado cualquier nmero de JCheckBoxes. Su apariencia es la de un cuadrado pequeo que est vaco cuando no est seleccionado y muestra una x cuando lo est. Adems, puede mostrar un texto y/o imagen que indique su finalidad. Entre las operaciones de los JCheckBox destacamos: public JCheckBox(): crea un JCheckBox sin texto ni icono y que no est seleccionado; public JCheckBox(String texto, boolean seleccionado): lo crea con un texto asociado y un estado inicial; public boolean isSelected(): devuelve true si est seleccionado; public void setSelected(boolean b): lo selecciona si b es true y lo marca como no seleccionado si es false; public String getText(): nos devuelve el texto asociado al JCheckBox. Esta operacin reemplaza a getLabel que ha pasado a ser deprecated; public void setEnabled(boolean b): permite habilitar o deshabilitar el componente para que puede ser utilizable o no por el usuario.

LANIA 2007

48

JRadioButton y ButtonGroup
Con la clase JRadioButton junto con la clase ButtonGroup construimos una serie de casillas de verificacin que estn agrupadas de manera que slo puede seleccionarse una y que el hecho de marcar una implique desmarcar las otras. Mtodos a destacar de JRadioButton:
public JRadioButton(): crea un JRadioButton que no est seleccionado; public JRadioButton(String texto, boolean seleccionado): lo crea con un estado de seleccin inicial y un texto asociado; public boolean isSelected() public void setSelected(boolean b) public String getText() public void setEnabled(boolean b)

Los mtodos a destacar del ButtonGroup son:

public ButtonGroup(): crea un nuevo ButtonGroup; public void add(AbstractButton b): es posible aadir cualquier componente que herede de AbstractButton. Si se aade ms de un botn seleccionado, slo el primero prevalecer LANIA 2007 este estado y los dems quedarn desactivados. 49 en

JComboBox
Es una lista desplegable de la que slo se puede elegir una opcin. Destacamos las siguientes operaciones: public JComboBox(): crea un JComboBox vaco; public JComboBox(Object[] items): lo crear a partir de un array de objetos que contiene elementos; public JComboBox(Vector items): obtiene los elementos del Vector; public void addItem(Object item): aade un nuevo item al JComboBox; public Object getItem(int indice): retorna el objeto que est situado en la posicin indice; public int getSelectedIndex(): devuelve el ndice del item seleccionado; public Object getSelectedItem(): devuelve el objeto seleccionado.
50

LANIA 2007

JList
La JList es una lista sobre la que podemos ver y seleccionar ms de un elemento simultneamente. En caso de que haya ms elementos de los que se pueden visualizar simultneamente a causa de las dimensiones de la lista, aparecer una barra de desplazamiento vertical. Mtodos relevantes: public JList(): crea una JList vaca; public JList(Object[] listaItems): la crea con los items contenidos en el array de objetos; public JList(Vector listaItems): la crea con los elementos del Vector; public int getSelectedIndex(): devuelve el ndice del primer elemento seleccionado (-1 si no hay ninguno); public int[] getSelectedIndices(): devuelve un array con los ndices que estn seleccionados; public Object getSelectedValue(): da la referencia al objeto seleccionado; public Object[] getSelectedValues(): devuelve un array con los Object seleccionados.
51

LANIA 2007

Menes
Entendemos por men toda estructura superior de una aplicacin grfica que nos permite desplegar unas listas de operaciones que a su vez pueden contener otras listas de operaciones. La estructura bsica de un men se compone de JMenuBar (la barra superior) de la que cuelgan los mens (JMenu) a los que aadimos elementos (JMenuItem)
LANIA 2007 52

Elementos de Men
JMenuBar: public JMenuBar(): crea una nueva JMenuBar; public JMenu add(JMenu m): aade un JMenu a la MenuBar; public JMenu getMenu(int indice): devuelve el men asociado al ndice correspondiente. JMenuItem (superclase de JCheckBoxMenuItem, JradioButtonItem y JMenu): public JMenuItem(): crea un elemento de men vaco; public JMenuItem(String texto): lo crea con un string asociado; public JMenuItem(Icon icono): es creado con una imagen asociada que ser la que se muestre en el men; public void setEnabled(boolean b): indicamos si queremos que se pueda seleccionar o no. JMenu: public JMenu(String s): crea un nuevo JMenu que mostrar el string especificado; public JMenu add(JMenuItem menuItem): aade un JMenuItem al JMenu; public JMenu add(String s): crea un nuevo elemento de men con el texto especificado y lo pone al final de este JMenu; public void addSeparator(): aade una lnea horizontal separadora; public JMenuItem getItem(int pos): devuelve el JMenuItem que contiene la posicin indicada
53

LANIA 2007

Ejemplo

LANIA 2007

54

Resultado

LANIA 2007

55

Resumen de interfaces tipo Listener

LANIA 2007

56

Programacin en Java
Modulo 13: Hilos

Laboratorio Nacional de Informtica Avanzada A. C. 2006

Qu son los hilos?


Un modo simplista de ver una computadora es que tiene un CPU y una memoria que contiene UN programa que la CPU ejecuta. De esta forma solo un programa se ejecuta a la vez en la CPU. En los sistemas modernos una computadora puede hacer ms de una tarea a la vez Los hilos, threads o contextos de ejecucin se considera que encapsulan CPU virtuales. La clase java.lang.Thread permite crear y LANIA 2007 controlar hilos.

58

Partes de un Thread
Un thread consta de:
CPU virtual Cdigo Datos

El cdigo puede ser compartido por multiples hilos independientes de los datos
Dos threads comparte el mismo cdigo cuando son instancias de la misma clase

Los datos pueden o no ser compartidos por multiples threads independiente del cdigo.
Dos threads comparten los datos cuando comparten el acceso a un objeto comn. LANIA 2007 59

Creando un Thread
El constructor de thread tiene como argumento un objeto que es una instancia de Runnable. Paso a seguir: Una clase A implementa la interfaz Runnable Se crea un objeto Thread Al constructor de Thread se le pasa el objeto A Se ejecuta el hilo con el mtodo start()

LANIA 2007

60

Ejemplo clase a partir de Runnable


public class carrera implements Runnable{ private String avance; private String marca; private int velocidad; private int delay; /** Creates a new instance of carrera */ public carrera(String marca, int delay) { avance = ""; this.marca = marca; this.delay = delay; } public void run() { for(int l = 0; l < 30; l++) { avance = avance + marca ; System.out.println("LINEA:"+l+avance); try { Thread.sleep(delay); } catch (InterruptedException ex) { ex.printStackTrace(); } } System.out.println("\nAcabe " + marca); } }

LANIA 2007

61

Ejemplo se crea el Thread


public static void main(String[] args) { // TODO code application logic here carrera a = new carrera("A,200); carrera b = new carrera("B,300); Thread ta = new Thread(a); Thread tb = new Thread(b); ta.start(); tb.start(); }
LANIA 2007 62

Estados bsicos de un Thread

LANIA 2007

63

Controles bsicos de un Thread


Verificar si un Thread no ha completado su tarea for(int i = 0; i < 100; i ++) { if(ta.isAlive()) { System.out.println("A todava est vivo"); try { Thread.sleep(3000); } catch (InterruptedException ex) { ex.printStackTrace(); } } }
LANIA 2007 64

Consultar la prioridad de un Thread


Un thread puede tener menor o mayor prioridad sobre otros threads. Los threads son puestos en colas de prioridades para que el programador de tareas los ejecute segn su prioridad Se puede consultar y cambiar la prioridad de ejecucin getPriority(); setPriority(); Thread.MAX_PRIORITY Thread.NORM_PRIORITY Thread.MIN_PRIORITY

LANIA 2007

65

Poniendo en espera un Thread


Thread.sleep(milisegundos)
Este mecanismo puede bloquear temporalmente la ejecucin de un thread por un periodo de tiempo El thread no necesariamente regresa a su ejecucin inmediantamente despues de que expir el tiempo. Depende de la prioridad en el programador de tareas.
LANIA 2007 66

Extendiendo la clase Thread


public class TCarrera extends Thread { private String avance; private String marca; private int velocidad; private int delay; /** Creates a new instance of TCarrera */ public TCarrera(String marca, int delay) { avance = ""; this.marca = marca; this.delay = delay; } public void run() { for(int l = 0; l < 30; l++) { avance = avance + marca ; System.out.println("LINEA:"+l+avance); try { Thread.sleep(delay); } catch (InterruptedException ex) { ex.printStackTrace(); } } System.out.println("\nAcabe " + marca); } }

LANIA 2007

67

Programacin en Java
Modulo 14: Flujos avanzados de control de I/O Laboratorio Nacional de Informtica Avanzada A. C. 2007

Introduccin
La entrada-salida de Java se basa en el uso de flujos de datos tambin conocidos como streams. Los streams son unas secuencias de datos que viajan desde un origen a un destino a travs de una va de comunicacin. Estos flujos pueden ser de lectura y/o escritura y se pueden conectar a distintas fuentes Por ejemplo: Transferencias de memoria a memoria Sistemas de archivos Redes Otras formas de E/S. La idea principal es usar los flujos para leer y escribir datos en los distintos dispositivos a travs de sus mtodos para poder abstraernos de las caractersticas concretas de la va de comunicacin
69

LANIA 2007

Definiciones
Input Stream
Es el punto donde inicia el flujo de datos

Output Stream
Es el punto donde los datos son consumidos

Nodo
Un input stream o un output stream
LANIA 2007 70

Tipos de streams en Java


Java soporta dos tipos de streams: Tipo Byte Tipo Carcter Los manejadores de tipo byte son los implementados por subclases de: InputStreams OutputStreams Los manejadores de tipo carcter son implementados por subclases de: Readers Writers
71

LANIA 2007

InputStream
Permiten el acceso a un flujo de datos generador de bytes Los mtodos de lectura del stream bsico de lectura son: public int read(): Lee solo el siguiente byte y lo devuelve como un entero en el rango de (0-255). si devuelve un 1 quiere decir que hemos alcanzado el fin de la fuente de datos public int read(byte[] b) : Almacena los datos ledos en un arreglo. Retorna el nmero de bytes ledos o -1 si alcanz el fin de la fuente de datos int read(byte[] b, int desplazamiento, int longitud): Almacena un rango de bytes indicado en longitud a partir del desplazamiento y devuelve -1 si alcanz el fin de la fuente. Otros mtodos: public void close(): Cierra el stream public int available(): Nmero de bytes preparados para ser leidos public void skip(long numBytes): Descarta numBytes del flujo Operaciones de marcaje public boolean markSupported(): Indica si el flujo es marcable public void mark(int numBytes): Marca la posicin actual as como el nmero de bytes que se podrn leer despus de resituar el stream a dicha marca. public void reset(): Situa el stream a la posicin donde se puso la marca
72

LANIA 2007

OutputStream
Anlogamente al InputStream tenemos los mtodos de escritura siguientes: public void write(int b): Escribe el byte menos significativo de b. public void write(byte[] b). Escribe b.lenght del arreglo b. public void write(byte[] b, int desplazamiento, int longitud). Escribe longitud de bytes a partir de desplazamiento del vector b. Otros mtodos public void close(): Cierra el flujo public void flush(): Obliga a realizar la escritura sobre el flujo. Se garantiza un flush() implcito cuando se llama a close().

LANIA 2007

73

Reader
Permiten el acceso a un flujo de datos generador de char Los mtodos de lectura del stream bsico de lectura son: public int read(): Lee solo el siguiente carcter UNICODE.si devuelve un 1 quiere decir que hemos alcanzado el fin de la fuente de datos public int read(char[] cbuf) : Almacena los datos ledos en un arreglo. Retorna el nmero de caracteres ledos o -1 si alcanz el fin de la fuente de datos int read(char[] b, int desplazamiento, int longitud): Almacena un rango de caracteres indicado en longitud a partir del desplazamiento y devuelve -1 si alcanz el fin de la fuente. Otros mtodos: public void close(): Cierra el stream boolean ready(): Si el flujo est listo public void skip(long numChar): Descarta numChar del flujo Operaciones de marcaje public boolean markSupported(): Indica si el flujo es marcable public void mark(int numChar): Marca la posicin actual as como el nmero de caracteres que se podrn leer despus de resituar el stream a dicha marca. public void reset(): Situa el stream a la posicin donde se puso la marca
74

LANIA 2007

Writer
Mtodos de escritura siguientes: public void write(int c) public void write(byte[] cbuf). public void write(byte[] cbuf, int desplazamiento, int longitud). Public void write(String string); Public void write(String string, int offset, int lenght) Otros mtodos public void close(): Cierra el flujo public void flush(): Obliga a realizar la escritura sobre el flujo. Se garantiza un flush() implcito cuando se llama a close().

LANIA 2007

75

DataOutPutStream
Permite la escritura de tipos de datos primitivos en un canal. Mtodos relevantes: writeBoolean(boolean v) writeByte(int v) writeChar(int v) writeDouble(double v) writeFloat(float v) writeInt(int v) writeLong(long v) writeShort(int v) writeUTF(String str). Permite la escritura de cadenas
76

LANIA 2007

DataInPutStream
Permite la lectura de tipos de datos primitivos en un canal. Mtodos relevantes: boolean readBoolean() byte readByte() char readChar() double readDouble() float readFloat() int readInt() long readLong() short readShort() String readUTF(). Permite la lectura de cadenas
77

LANIA 2007

FileOutputStream
Sirve para escribir flujos a un archivo Constructores reelevantes:
FileOutputStream(String NombreArchivo) FileOutputStream(File Archivo)

LANIA 2007

78

FileInputStream
Sirve para leer flujos de un archivo Constructores relevantes:
FileInputStream(String NombreArchivo) FileOutputStream(File Archivo)

LANIA 2007

79

InputStreamReader
Funciona como puente para la lectura de bytes y la transformacin en caracteres utilizando una codificacin especial. Constructores reelevantes:
InputStreamReader(InputStream in) InputStreamReader(InputStream in, String encode)

LANIA 2007

80

OutputStreamWriter
Funciona como puente para la escritura de caracteres en un flujo que utiliza bytes de acuerdo a una codificacin especial. Constructores reelevantes:
OutputStreamWriter(OutputStream in) OutputStreamWriter(InputStream in, String encode)

LANIA 2007

81

Qu es serializacin?
Serializacin
Proceso de escribir un objeto vivo en un stream binario Deserializacin.- restaura el objeto del stream.

La serializacin hace posible


Persistencia de objetos Transmisin de objetos Swap (intercambio) de memoria

LANIA 2007

82

Qu puede ser serializable?


Un objeto puede ser serializado si
La clase es serializable (implementa java.io.Serializable) Todos sus miembros son serializables

Serializacin ofrece un mapeo del objeto


Todos los objetos contenidos son automticamente incluidos Cada objeto relacionado es serializado solo una vez

Si un objeto no es serializable:
Se lanza la excepcin java.io.NotSerializableException El proceso es abortado

LANIA 2007

83

Qu no puede ser serializable?


Objetos relacionados con procesos locales
Hilos, grupos de Hilos, sesiones

Recursos de red o sistema


Objetos Stream, sockets, URLs

LANIA 2007

84

Diferentes serializaciones
Java ofrece tres tipos de serializacin Serializacin por defecto
La clase debe ser elegible para serializacin

Serializacin Custom (a la medida)


Usa el mecanismo por defecto, permitiendo seleccin

Externalizacin
No usa el mecanismo por defecto, la clase implementa la serializacin
LANIA 2007 85

Filtros de serializacin
La serializacin es proporcionada por dos clases filtro ObjectOutputStream

ObjectInputStream

LANIA 2007

86

Serializando objetos
1. Cree un OutputStream al destino 2. selo para crear un ObjectOutputStream 3. Llamar al mtodo writeObject() para serializar el objeto 4. Repetir el paso 3 por cada objeto a serializar 5. Cerrar el OutputStream

LANIA 2007

87

Deserializando objetos
1. Cree un InputStream a la fuente 2. selo para crear un ObjectInputStream 3. Llamar al mtodo readObject() para deserializar el objeto 4. Si es necesario realice un casting al tipo deseado 5. Repetir el paso 3 y 4 por cada objeto a deserializar 6. Cerrar el InputStream
LANIA 2007 88

Utilizacin de las clases

Entrada a travs del teclado


java.io.*;

System.in

isr
Objeto InputStream

teclado

InputStreamReader
recien creado

BufferedReader
recien creado

LANIA 2007

89

Salida a archivo
java.io.*;

Fichero fsr

isr

FileOutputStream

DataOutPutStream

float x

LANIA 2007

90

Programacin en Java
Modulo 15: Programacin en Red

Laboratorio Nacional de Informtica Avanzada A. C. 2007

TCP/IP
Modelo de comunicacin estndar en Internet La comunicacin se basa: Direccin IP: 120.32.1.3 Puerto: 80

Una aplicacin por Internet utiliza un puerto El puerto se encuentra en una mquina que tiene una direccin IP La comunicacin se a travs de puerto/IP
LANIA 2007 92

Socket
Un socket es una abstraccin que me permite conectarme a un puerto en un determinado host Los sockets en java pueden ser de tipo Servidor o Cliente

LANIA 2007

93

Modelo de conexin en Java por Sockets

LANIA 2007

94

Ejemplo Server Socket


public static void main(String argv[]) { System.out.println("Prueba de sockets TCP (servidor)"); ServerSocket socket; boolean fin = false; try { socket = new ServerSocket(6001); Socket socket_cli = socket.accept(); DataInputStream in = new DataInputStream(socket_cli.getInputStream()); do { String mensaje =""; mensaje = in.readUTF(); System.out.println(mensaje); } while (1>0); } catch (Exception e) { System.err.println(e.getMessage()); System.exit(1); }
LANIA 2007 95

Ejemplo Socket Cliente


public static void main(String argv[]) { if (argv.length == 0) { System.err.println("java sockettcpcli servidor"); System.exit(1); } BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Prueba de sockets TCP (cliente)"); Socket socket; InetAddress address; byte[] mensaje_bytes = new byte[256]; String mensaje=""; try { System.out.print("Capturando direccin de host... "); address=InetAddress.getByName(argv[0]); System.out.println("ok"); System.out.print("Creando socket... "); socket = new Socket(address,6001); System.out.println("ok"); DataOutputStream out = new DataOutputStream(socket.getOutputStream()); System.out.println("Introduce mensajes a enviar:"); do { mensaje = in.readLine(); out.writeUTF(mensaje); } while (!mensaje.startsWith("fin")); } catch (Exception e) { System.err.println(e.getMessage()); System.exit(1); }

LANIA 2007

96

También podría gustarte