Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Como usar mark() y reset() al ller ficheros ?

375 views
Skip to first unread message

juanfran(madritel)

unread,
Dec 16, 2002, 10:27:05 AM12/16/02
to
Buenas, estoy haciendo mis primeros pinitos en Java, y tengo un problema a
la hora de leer archivos.

Para leer el archivo uso InputStreamReader, y en principio todo va bien, el
problema viene cuando quiero volver a una linea anterior (en concreto a la
primera linea).
Mirando el API encontre los metodos mark(int) y reset que en teoria deben
servir para mi proposito. El problema es que aunque al compilar no me de
ningun problema, al ejecutar la JVM se cuelga.

Alguna idea? bueno, gracias de antemano.


Ignacio Alcázar

unread,
Dec 30, 2002, 6:53:44 AM12/30/02
to
En el API de java se especifica para algunos streams que el valor
introducido en el método mark puede ignorarse. En otros streams, sin
embargo, deberían marcar el número de bytes que podemos leer desde esa
marca antes de invalidarle, simplemente con el fin de evitar leer una
gran cantidad de información. Sin embargo, cuando he probado esta carac
terística, la marca no se invalidaba, de manera que cuando llamaba al
reset me lo colocaba en la marca, aunque leyera más bytes de establecido
en el método mark.
Vamos al grano. Una vez hayas leído la información que quieras y sea el
momento de establecer una marca, simplemente llama al método mark.
Posteriormente,
cuando hayas leído otro trozo de información y quieras volver a leer
desde la marca, llama el método reset. Y ya está. Te mando un ejemplo

ByteArrayOutputStream bos = new ByteArrayOutputStream();
//Escribimos algo en el stream, concretamente 10 A
for(int i=0;i<10;i++) bos.write(65);
//Si usamos el reset en un stream de escritura
//colocamos el puntero en la posición inicial
bos.reset();
//Escribimos desde la B en adelante, 10 letras
for(int i=0;i<10;i++) bos.write(66+i);
//Mostramos la información que hemos escrito
byte[] b = bos.toByteArray();
for(int i=0;i<b.length;i++)
{
System.out.print((char)b[i]);
}

//Leemos desde el stream
ByteArrayInputStream bis = new ByteArrayInputStream(b,0,b.length);
int a = 0;
//Preguntamos si podemos usar el reset y el mark
System.out.println(">>>>>"+bis.markSupported());

int contador = 0;
//Cuando en el stream ya no hay nada más que leer
//obtenemos un -1
while ((a=bis.read())!=-1)
{
System.out.print((char)a);
//Cuando leemos el primer byte, añadimos una
marca
if(contador== 1) bis.mark(1);
//Cuando leamos el tercer byte, volvemos
//a la marca, así que releeremos el segundo
//y el tercer bytes
if(contador== 3) bis.reset();
contador++;
}


--
Posted via Mailgate.ORG Server - http://www.Mailgate.ORG

0 new messages