javax.microedition.io
y un pequeño subgrupo de paquetes del API de J2SE (Java 2 Standard Edition):
java.io
java.lang
java.util
String
y StringBuffer
: Ya comentadas anteriormente.
Thread
e interfaz Runnable
: Ya comentadas anteriormente.
Math
: Contiene métodos y constantes estáticos usados para operaciones matemáticas.
Object
Boolean
, Byte
,
Character
, Double
, Float
,
Integer
, Long
, Short
.
System
y Runtime
.
Class
.
Throwable
.
Error
(errores serios que los programas no suelen capturar) que no son necesarias debido a que la VM de CLDC no las soporta. Algunas de las clases de Exception
también son omitidas.
Float
y Double
, ya que la VM no soporta operaciones en coma flotante.
ClassLoader
SecurityManager
y StrictMath
que no son necesarias debido a que su utilidad no está en la especificación de CLDC.
Cloneable
, Comparable
y Serializable
.
La clase Object
boolean equals(Object obj) final Class getClass() int hashCode() final void notify() final void notifyAll() public final void wait(long timeout) throws InterruptedException public String toString()
finalize()
debido a que la VM de CLDC no implementa la finalización. Tampoco contiene el método clone()
(el interfaz java.lang.Cloneable
tampoco está en CLDC).
Existe una clase de envoltura por cada uno de los tipos simples.
Vector
permite guardar una colección de objetos de cualquier tipo, pero deben ser objetos de alguna clase, y no tipos simples.
Clases de envoltura para tipos numéricos
java.lang.Number
, con lo que las clases numéricas derivan directamente de Object
.
java.lang.Comparable
, con lo que los números no pueden compararse directamente como en J2SE.
Byte
Integer
, Long
, Short
. En CLDC 1.1 además tenemos Float
y Double
.
Double(double valor)
, Integer(integer valor)
, etc
double doubleValue()
, float floatValue()
, int intValue()
, etc.: Convierten el valor del número al tipo deseado.
Clase Character: envoltura para char
Character(char valor)
char charValue()
: Devuelve el carácter que representa este objeto.
static boolean isDigit(char ch) static boolean isLowerCase(char ch) static boolean isUpperCase(char ch)
static char toLowerCase(char ch) static char toUpperCase(char ch)
Clase Boolean: envoltura para boolean
Boolean(boolean valor)
TRUE
y FALSE
.
boolean booleanValue()
: Devuelve el valor que represente este objeto.
Características de reflexión
java.lang.Class
relacionados con ella se han eliminado. Sólo se dispone en esta clase de los métodos forName()
y newInstance()
.
Propiedades del sistema
Propiedad | Significado | Ejemplo |
---|---|---|
microedition.configuration |
Configuración J2ME soportada por la plataforma | CLDC-1.0 |
microedition.encoding |
Codificación de caracteres soportada por la plataforma | ISO8859_1 |
microedition.platform |
Plataforma o dispositivo | J2ME |
microedition.profile |
Perfil soportado por el dispositivo | MIDP-1.0 |
java.lang.System.getProperty()
;
String configuration = System.getProperty( "microedition.configuration");
java.util.Properties
de J2SE, con lo que no se puede usar el método getProperties()
para obtener una lista de todas las propiedades disponibles.
Las clases System y Runtime
getProperties()
, setProperty()
y setProperties()
.
Random
usada para generar n'umeros aleatorios.
Clases de colección
CLDC incluye las siguientes clases e interfaz para manejar colecciones de objetos:
Hashtable
Stack
Vector
Enumeration
Interfaz Enumeration
Define los métodos que permiten enumerar (obtener uno cada vez) los elementos de un conjunto de objetos. Esta interfaz define los dos métodos siguientes:
boolean hasMoreElements()
devuelve true
mientras haya más elementos para extraer y false
cuando se han enumerado todos los elementos.
Object nextElement()
devuelve el siguiente objeto de la enumeración como una referencia genérica a objeto, es decir, cada llamada a nextElement()
obtiene el siguiente objeto de la enumeración.
Ejemplo: P60/EnumerateDemo.java
import java.util.Enumeration; class Enum implements Enumeration { private int count = 0; private boolean more = true; public boolean hasMoreElements() { return more; } public Object nextElement() { count++; if(count > 4) more = false; return new Integer(count); } } class EnumerateDemo { public static void main(String args[]) { Enumeration enum = new Enum(); while(enum.hasMoreElements()) { System.out.println(enum.nextElement()); } } }
Salida del programa
1 2 3 4 5
Clase Vector
Los arrays o matrices de Java son de longitud fija. Una vez creados no se puede modificar su tamaño, lo que implica que necesitamos conocer a priori el número de elementos que van a almacenar.
Para resolver este problema, Java define la clase Vector
.
Vector() Vector(int tamanoInicial) Vector(int tamanoInicial, int incrCapacidad)
final void addElement(Object elemento)
: Añade el objeto referenciado con elemento
al vector.
final Object elementAt(int posicion)
: Obtiene el elemento que se encuentra en la posición dada.
final boolean contains(Object elemento)
: Permite determinar si el vector contiene un determinado elemento.
final Object firstElement()
: Obtiene el primer elemento del vector.
final Object lastElement()
: Obtiene el último elemento del vector.
final int indexOf(Object elemento)
: Devuelve la posición de la primera ocurrencia de elemento. Si el objeto no está en el vector devuelve -1.
final int lastIndexOf(Object elemento)
: Devuelve la posición de la última ocurrencia de elemento.
final boolean removeElement(Object elemento)
: Elimina el elemento del vector. Si existe más de una ocurrencia del objeto, se elimina la primera. Devuelve true si se hace la operación correctamente y false si no encuentra el objeto.
final void removeElementAt(int posicion)
: Elimina el elemento de la posición especificada.
final Object elements()
: Devuelve una enumeración de los elementos del vector.
import java.util.Vector; import java.util.Enumeration; class VectorDemo { public static void main(String args[]) { Vector v = new Vector(3, 2); System.out.println("Tamaño inicial: " + v.size()); System.out.println("Capacidad inicial: " + v.capacity()); v.addElement(new Integer(1)); v.addElement(new Integer(2)); v.addElement(new Integer(3)); v.addElement(new Integer(4)); System.out.println("Capacidad después de añadir 4 elementos: " + v.capacity()); v.addElement(new Double(5.45)); System.out.println("Capacidad actual: " + v.capacity()); v.addElement(new Double(6.08)); v.addElement(new Integer(7)); System.out.println("Capacidad actual: " + v.capacity()); v.addElement(new Float(9.4)); v.addElement(new Integer(10)); System.out.println("Capacidad actual: " + v.capacity()); v.addElement(new Integer(11)); v.addElement(new Integer(12)); System.out.println("Primer elemento: " + (Integer)v.firstElement()); System.out.println("Último elemento: " + (Integer)v.lastElement()); if(v.contains(new Integer(3))) System.out.println("El Vector contiene 3."); Enumeration vEnum = v.elements(); System.out.println("\nElementos en el vector:"); while(vEnum.hasMoreElements()) System.out.print(vEnum.nextElement() + " "); System.out.println(); } }
Salida del programa
Tamaño inicial: 0 Capacidad inicial: 3 Capacidad después de añadir 4 elementos: 5 Capacidad actual: 5 Capacidad actual: 7 Capacidad actual: 9 Primer elemento: 1 Último elemento: 12 El Vector contiene 3. Elementos en el vector: 1 2 3 4 5.45 6.08 7 9.4 10 11 12
Clase Stack
Es una subclase de la clase Vector
que implementa una pila del tipo último en entrar, primero en salir
Stack()
: Constructor por defecto, que crea una pila vacía:
Vector
y añade adem'as:
Object push(Object elemento)
: Introduce el elemento en la pila, y además lo devuelve.
Object pop()
: Devuelve y elimina el elemento superior de la pila. Este método lanza la excepción EmptyStackException
si la pila está vacía.
Object peek()
: Devuelve el elemento superior de la pila pero no lo borra.
boolean empty()
: Devuelve true si la pila está vacía, y false en otro caso.
int search(Object elemento)
: Determina si un objeto está en la pila y devuelve el número de operaciones pop que habría que realizar para que dicho elemento quede en la parte superior de la pila.
import java.util.Stack; import java.util.EmptyStackException; class StackDemo { static void showpush(Stack st, int a) { st.push(new Integer(a)); System.out.println("push(" + a + ")"); System.out.println("stack: " + st); } static void showpop(Stack st) { System.out.print("pop -> "); Integer a = (Integer) st.pop(); System.out.println(a); System.out.println("stack: " + st); }
public static void main(String args[]) { Stack st = new Stack(); System.out.println("stack: " + st); showpush(st, 42); showpush(st, 66); showpush(st, 99); showpop(st); showpop(st); showpop(st); try { showpop(st); } catch (EmptyStackException e) { System.out.println("pila vacía"); } } }
Salida del programa
stack: [] push(42) stack: [42] push(66) stack: [42, 66] push(99) stack: [42, 66, 99] pop -> 99 stack: [42, 66] pop -> 66 stack: [42] pop -> 42 stack: [] pop -> pila vacía
Clase Hashtable
Se usa para almacenar una colección de objetos que están indexados por cualquier otro objeto arbitrario.
hashCode()
y equals()
de la clase Object
.
int hashCode()
: Calcula y devuelve el código hash para el objeto.
boolean equals(Object objeto)
: Compara si dos objetos son iguales.
Hashtable()
Hashtable(int tamanoInicial)
import java.util.Hashtable; import java.util.Enumeration; class HTDemo { public static void main(String args[]) { Hashtable balance = new Hashtable(); Enumeration names, negbal; String str; double bal; balance.put("John Doe", new Double(3434.34)); balance.put("Tom Smith", new Double(123.22)); balance.put("Jane Baker", new Double(1378.00)); balance.put("Tod Hall", new Double(99.22)); balance.put("Ralph Smith", new Double(-19.08)); names = balance.keys(); while(names.hasMoreElements()) { str = (String) names.nextElement(); System.out.println(str + ": " + balance.get(str)); } System.out.println(); bal = ((Double)balance.get("John Doe")).doubleValue(); balance.put("John Doe", new Double(bal+1000)); System.out.println("El nuevo saldo de John Doe es: " + balance.get("John Doe")); } }
Salida del programa
Tod Hall: 99.22 Ralph Smith: -19.08 John Doe: 3434.34 Jane Baker: 1378.0 Tom Smith: 123.22 El nuevo saldo de John Doe es: 4434.34
La clase Date
Date
es una envoltura para un número entero que representa una fecha y una hora como un desplazamiento (en milisegundos) desde 00:00 GMT (Greenwich Mean Time), 1 de Enero de 1970.
Date
con el tiempo actual o un tiempo dado a partir de un desplazamiento desde la época (00:00 horas del 1 enero de 1970):
Date()
Date(long desplazamiento)
equals()
que compara un Date
con otro.
void setTime(long desplazamiento)
long getTime()
boolean equals(Object obj)
toString()
que convierte el Date
en un String
en la forma dow mon dd hh:mm:ss zzz yyyy
public String toString()
Calendar
para convertir entre diferentes Date
s y para transformar la representación del Date
en algo más significativo que un desplazamiento.
La clase TimeZone
TimeZone
representa el desplazamiento de una zona respecto a la zona horaria GMT.
TimeZone
de CLDC es mucho más pobre que la correspondiente de J2SE.
getDefault()
y getDefault(String)
, que obtienen la zona horaria por defecto o bien la especificada con el String
para el dispositivo en cuestión.
static TimeZone getDefault() static TimeZone getDefault(String ID)
La clase Calendar
Date
y los correspondientes día, mes, año, hora, minutos y segundos.
Calendar
es una clase abstracta. Para obtener una instancia de ella, se pueden usar los métodos estáticos, que devuelven un objeto de una subclase de Calendar
que ya implementan las reglas adecuadas al entorno concreto en que funciona el dispositivo:
static Calendar getInstance() static Calendar getInstance(TimeZone zone)
setTime(Date)
permite establecer hora y fecha mediante un Date
:
void setTime(Date date)
set()
establece un nuevo valor pero sólo para el campo seleccionado.
void set(int field, int value)
get()
permite obtener el valor de los distintos campos (hora, minutos, segundos, etc) usando constantes tales como Calendar.HOUR
, Calendar.MINUTE
, Calendar.SECOND
, etc.
int get(int field)
String toString()
convierte el Calendar
en un String
en la forma Tue, 9 Apr 2002 12:00:00 UTC
Ejemplo
Calendar cal = Calendar.getInstance(); Date date = new Date(); cal.setTime(date); int month = cal.get(Calendar.MONTH); int day = cal.get(Calendar.DAY_OF_MONTH);
Otro ejemplo
// Obtenemos un Calendar y obtenemos los milisegundos // de la fecha actual Calendar cal = Calendar.getInstance(); Date date = new Date(); long offset = date.getTime(); // Sumamos 20 días a la fecha actual final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000L; offset += 20 * MILLIS_PER_DAY; date.setTime(offset); // Instanciamos la nueva fecha en el offset del Calendar cal.setTime(date); // Obtenemos la fecha ya ajustada month = cal.get(Calendar.MONTH); day = cal.get(Calendar.DAY_OF_MONTH);
Otro ejemplo
// Obtenemos día y mes de fecha actual Calendar cal = Calendar.getInstance(); Date date = new Date(); cal.setTime(date); int month = cal.get(Calendar.MONTH); int day = cal.get(Calendar.DAY_OF_MONTH); // Sumamos 20 días al campo día en el Calendar cal.set(Calendar.DAY_OF_MONTH, day+20); // Obtenemos la fecha ya ajustada: NO FUNCIONA BIEN month = cal.get(Calendar.MONTH); day = cal.get(Calendar.DAY_OF_MONTH);
La clase Random
Se usa para generar una secuencia de n'umeros seudoaleatorios.
public Random(); public Random(long semilla);
protected int next(int bits)
public int nextInt()
: Genera el siguiente n'umero aleatorio int uniformemente distribuido
entre el conjunto de los n'umeros int.
public int nextInt(int n)
: Genera el siguiente n'umero aleatorio int uniformemente distribuido
entre 0 y el n'umero int pasado como argumento (exclusive).
public int nextLong()
: Genera el siguiente n'umero aleatorio long uniformemente distribuido
entre el conjunto de los n'umeros long.
public float nextFloat()
: Genera el siguiente n'umero aleatorio float uniformemente distribuido
entre y .
public double nextDouble()
: Genera el siguiente n'umero aleatorio double uniformemente distribuido
entre y .
public void setSeed(long seed)
: Establece la semilla.
java.io
contiene las clases necesarias para E/S en Java a través de flujos de datos (data streams).
InputStream
o OutputStream
.
Reader
o Writer
.
Las clases InputStream
y OutputStream
son superclases abstractas de todos los flujos orientados a bytes, tal como en J2SE.
Clase java.io.InputStream
Superclase abstracta de todos los flujos orientados a entrada de bytes.
Los m'etodos de esta clase lanzan una IOException
si se producen condiciones de error.
InputStream()
int available()
: Devuelve los bytes disponibles en el flujo.
void close()
: Cierra el flujo y libera los recursos que usa.
void mark(int readlimit)
: Establece una marca en la posici'on actual del flujo, que permite regresar posteriormente a esa posici'on.
boolean markSupported()
: Indica si el flujo permite poner marcas.
int read()
int read(byte[] buffer)
int read(byte[] buffer, int offset, int length)
: Lee bytes del flujo de entrada. Devuelve -1 si no hay bytes disponibles.
void reset()
: Reposiciona el flujo en la marca establecida previamente.
long skip(long bytecount)
: Salta bytecount
bytes devolviendo el n'umero de bytes saltados.
Ejemplo
try{ InputStream is = Conector.openInputStream( "socket://127.0.0.1:8888"); int ch; while((ch = in.read()) >0) { // hacer algo con el dato leido } } catch (IOException x) { // Manejar la excepción }
Clase java.io.OutputStream
Superclase de todos los flujos orientados a salida de bytes.
Los m'etodos de esta clase devuelven void y lanzan una IOException
si se producen condiciones de error.
OutputStream()
void close()
: Cierra el flujo y libera los recursos que utiliza.
void flush()
: Fuerza a escribir los posibles bytes que haya almacenados en un buffer de memoria.
void write(int b)
void write(byte[] bytebuffer)
void write(byte bytebuffer[], int offset, int count)
: Escribe un byte o un array de bytes en el flujo.
Clase ByteArrayInputStream
Flujo de entrada que usa un array de bytes como origen de los datos.
RecorStore
s de MIDP que se estudiarán más adelante. Estos son una especie de ficheros que guardan los datos en arrays de bytes. En los MIDLets se suelen leer los datos usando un ByteArrayInputStream
ByteArrayInputStream
:
ByteArrayInputStream(byte array[]) ByteArrayInputStream(byte array[],int offset, int numBytes)
InputStream
.
Ejemplo de uso de ByteArrayInputStream: P70/ByteArrayInputStreamDemo.java
import java.io.*; class ByteArrayInputStreamDemo { public static void main(String args[]) throws IOException { String tmp = "abcdefghijklmnopqrstuvwxyz"; byte b[]; b=tmp.getBytes(); ByteArrayInputStream input1 = new ByteArrayInputStream(b); ByteArrayInputStream input2 = new ByteArrayInputStream(b, 0, 3); } }
Otro ejemplo de ByteArrayInputStream: P71/ByteArrayInputStreamReset.java
import java.io.*; class ByteArrayInputStreamReset { public static void main(String args[]) throws IOException { byte b[] = { 'a', 'b', 'c' }; ByteArrayInputStream in = new ByteArrayInputStream(b); for (int i=0; i<2; i++) { int c; while ((c = in.read()) != -1) { if (i == 0) { System.out.print((char) c); } else { System.out.print(Character.toUpperCase((char) c)); } } System.out.println(); in.reset(); } } }
Salida
abc ABC
Clase ByteArrayOutputStream Flujo de salida que usa un array de bytes como destino de los datos.
ByteArrayOutputStream
:
ByteArrayOutputStream()
: Crea un búfer con 32 bytes.
ByteArrayOutputStream(int numBytes)
: Crea un búfer con el tamaño especificado.
OutputStream
contiene los siguientes:
public void reset()
: Descarta todos los datos almacenados en el flujo, hasta el momento, al hacer igual a cero el campo count
(el cual representa el número de bytes válidos en el vector dónde se almacenan los datos (bufer)).
public int size()
: Devuelve el tamaño actual del búfer.
public byte[] toByteArray()
: Devuelve una copia del búfer del flujo.
public String toString()
: Convierte el contenido del búfer en un String.
Ejemplo: P72/ByteArrayOutputStream.java
import java.io.*; class ByteArrayOutputStreamDemo { public static void main(String args[]) throws IOException { ByteArrayOutputStream f = new ByteArrayOutputStream(); String s = "Esto se meterá en el array"; byte buf[] ; buf=s.getBytes(); f.write(buf); System.out.print("Se escribe el bufer como un string: "); System.out.println(f.toString()); System.out.print("Se lee del buffer y guardamos en array: "); byte b[] = f.toByteArray(); for (int i=0; i<b.length; i++) { System.out.print((char) b[i]); } System.out.println("\nHacemos un reset"); f.reset(); for (int i=0; i<3; i++) f.write('X'); System.out.println("Volvemos a escribir el bufer"+ " como un string: " + f.toString()); } }
Salida del programa
Se escribe el bufer como un string: Esto se meterá en el array Se lee del buffer y guardamos en array: Esto se meter? en el array Hacemos un reset Volvemos a escribir el bufer como un string: XXX
Clase DataOutputStream
Esta subclase de OutputStream
proporciona métodos para escribir tipos de datos básicos de Java de un forma independiente de la máquina, en el subyacente flujo de salida.
DataOutput
.
openDataOutputStream()
de la clase javax.microedition.io.Connector
.
public DataOutputStream(OutputStream in)
OutputStream
tenemos:
void writeBoolean(boolean v)
: Escribe en el flujo el valor boolean usando un byte.
void writeChar(int v)
: Escribe en el flujo el carácter usando dos bytes.
void writeChars(String v)
: Escribe el String en el flujo como una secuencia de caracteres (dos bytes cada uno).
void writeUTF(String s)
: Escribe el String en el flujo usando codificación UTF-8.
void writeByte(int v)
: Escribe el entero usando un byte.
void writeShort(int v)
: Escribe el entero (short) usando dos bytes.
void writeInt(int v)
: Escribe el entero usando cuatro bytes.
void writeLong(long v)
: Escribe el entero con ocho bytes.
void writeFloat(float v)
: Escribe el float usando cuatro bytes.
void writeDouble(double v)
: Escribe el double usando ocho bytes.
Ejemplo de DataOutputStream usando un RecorStore
public class Record{ public String nombreJugador; public int puntos; } Record record = new Record(); record.nombreJugador = "Tomas"; record.puntos = 12345678; // Crear los flujos de salida ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream os = new DataOutputStream(baos); // Escribir los valores en los flujos os.writeUTF(record.nombreJugador); os.writeInt(record.puntos); os.close(); //Obtener el array de bytes con los valores guardados byte[] data = baos.toByteArray(); //Escribir el record en el record store int id = recordStore.addRecord(data,0,data.length);
Clase DataInputStream
Esta subclase de InputStream
proporciona métodos para leer tipos de datos básicos de Java de un forma independiente de la máquina, a partir del subyacente flujo de entrada.
DataInput
.
openDataInputStream()
de la clase javax.microedition.io.Connector
.
public DataInputStream(InputStream in)
InputStream
tenemos:
boolean readBoolean()
: Lee un byte del flujo, devolviendo true si no es cero y false en otro caso.
char readChar()
: Lee dos bytes del flujo, y los devuelve como char (en código Unicode).
String readUTF()
: Lee bytes del flujo, y los devuelve como un String
con representación Unicode. En el flujo se supone que el string está almacenado en formato UTF-8.
byte readByte()
: Lee un byte del flujo, que es tratado como un entero con signo en el rango -128 a 127.
int readUnsignedByte()
: Lee un byte, y lo interpreta como un entero con signo en el rango 0 a 255, devolviéndolo como un int.
short readShort()
: Lee dos bytes, y los devuelve en un short.
int readUnsignedShort()
: Lee dos bytes, y los interpreta como un short sin signo, devolviéndolo en un int.
int readInt()
: Lee cuatro bytes, y los devuelve en un int.
long readLong()
: Lee ocho bytes, y los devuelve en un long.
float readFloat()
: Lee cuatro bytes, y los devuelve en un float.
float readDouble()
: Lee ocho bytes, y los devuelve en un double.
void readFully(byte[] b)
: Lee parte de los bytes del flujo, guardándolos en el array pasado como parámetro. Se leen tantos bytes, como la longitud de tal array.
void readFully(byte[] b, int off,int len)
: Similar al anterior.
Ejemplo de DataInputStream con el anterior RecordStore
byte[] data = recordStore.getRecord(recordId); DataInputStream is = new DataInputStream( new ByteArrayInputStream(data)); Record record = new Record(); record.nombreJugador = is.readUTF(); record.score = is.readInt(); is.close();
Clase PrintStream
Extiende OutputStream
y es usada para añadir funcionalidad a
otro flujo de salida de bytes.
Esta funcionalidad es la capacidad de convertir los distintos
tipos básicos de Java y objetos, en un formato que puede imprimirse en el subyacente
OutputStream
pasado al constructor de PrintStream
.
System.out
y System.err
son ejemplos de
PrintStream
.
public PrintStream(OutputStream out);
print(tipo valor)
o println(tipo valor)
, que
convierten el valor en un String
(codificado con la codificación usada por el dispositivo), y luego
lo escriben en el flujo.
Clase Reader
Es una clase abstracta que proporciona soporte para leer flujos de caracteres.
Reader
se diferencia de un InputStream
en que trabaja
con caracteres Unicode de 16 bits en lugar de los 8 bits usados por los
InputStream
.
InputStream
de 8 bits puede convertirse
en una secuencia de caracteres Unicode usando el constructor de
la subclase InputStreamReader
.
Reader
es que la
codificación de los caracteres se traduce automáticamente en la operación
de lectura, desde la representación en bytes de los datos a la
representación en caracteres de tales datos.
void close()
void mark(int readAheadLimit)
boolean markSupported()
void reset()
long skip(long n)
: Salta n caracteres.
boolean ready()
: Indica si el flujo está preparado para poder leer de él.
int read()
: Lee un caracter.
int read(char[] cbuf)
: Lee un array de caracteres.
int read(char[] cbuf,int off,int len)
: Similar al anterior.
Writer
Es de nuevo una clase abstracta que define m'etodos implementados por las subclases para proporcionar salida de caracteres.
Writer
se diferencia de un OutputStream
en que trabaja con
caracteres Unicode de 16 bits en vez de con los 8 bits de los OutputStream
.
OutputStreamWriter
.
Writer
es de nuevo que
la codificación de los caracteres se translada automáticamente entre
la representación en bytes de los datos y la representación en caracteres.
void close()
void flush()
void write(int c)
: Escribe un caracter.
void write(char[] cbuf)
: Escribe un array de caracteres.
void write(char[] cbuf,int off,int len)
: Similar al anterior.
void write(String str)
: Escribe un String.
void write(String str,int off,int len)
: Escribe un trozo del String.
InputStreamReader
Esta clase extiende la clase Reader
y proporciona una
implementación para leer caracteres (8 bits) de un flujo de bytes InputStream
convirtiéndolos en caracteres Unicode.
InputStream
a los caracteres que devuelve el InputStreamReader
se lleva
a cabo con la codificaci'on que especifiquemos en el constructor, o bien
con la codificaci'on por defecto del dispositivo.
public InputStreamReader(InputStream is) InputStreamReader(InputStream is, String enc)
Reader
OutputStreamWriter
Extiende la clase Writer
y proporciona la implementación necesaria
para poder escribir caracteres Unicode en un flujo de bytes OutputStream
(escribe 8 bits por cada car'acter).
OutputStreamWriter
se lleva
a cabo con la codificaci'on que especifiquemos en el constructor, o bien
con la codificaci'on por defecto del dispositivo.
public OutputStreamWriter(OutputStream os); public OutputStreamWriter(OutputStream os, String encoding) throws UnsupportedEncodingException;
Writer
InputStream
y OutputStream
.
Un ejemplo típico de tales recursos es una página HTML o un servlet de Java, que pueden identificarse mediante un URL (Uniform Resource Locator).