Article View: es.comp.lenguajes.java
Article #29906Re: Capturando stdin y stdout
From: Chano G�mez
Date: Sat, 27 Sep 1997 00:00
Date: Sat, 27 Sep 1997 00:00
73 lines
2798 bytes
2798 bytes
> veo_octave = proc.getInputStream();
> datos_buffer = new BufferedInputStream(veo_octave);
> datos = new DataInputStream(datos_buffer);
�Por qu� todo el mundo crea siempre BufferedXXXStream intermedios? Creo
recordar que yo nunca los he utilizado para nada y siempre me ha ido
estupendamente. Estoy seguro de que el S.O. usa buffers para cualquier
operaci�n de entrada/salida. Me parece redundante preocuparse de eso en la
parte de usuario.
> while (lon !=1) {
>
> try {
> aux = flujo.read();
> print_salida.write(aux);
>
>
> System.out.print((char) aux);
>
> lon = flujo.available();
>
>
> } catch (IOException e) {
> ; }
> }
Esa condici�n de parada me resulta un poco "extra�a". No es lo mismo el
n�mero de bytes "disponibles" que el n�mero de bytes que quedan por leer.
Esto es parte del tutorial de E/S que estoy escribiendo...
===========================
�Cu�ntos bytes hay disponibles?
Los m�todos anteriores bloquean la ejecuci�n hasta que existen nuevos datos
para ser le�dos. Si estos datos vienen, por ejemplo, desde una conexi�n de
red, pueden pasar varios segundos (o m�s tiempo, dependiendo de la
situaci�n) hasta que lleguen nuevos datos. Si estamos interesados en leer
desde un InputStream pero no queremos arriesgarnos a que nuestro programa
se pare durante un tiempo indefinido, podemos usar el m�todo available(),
que devuelve el n�mero de bytes disponibles que podemos leer sin
bloquearnos. Estos bytes disponibles ser�n los que el sistema operativo
tenga almacenados en sus buffers de entrada.
Si, por ejemplo, tenemos varias conexiones en red abiertas, podemos usar el
m�todo available() para determinar a cu�l de ellas debemos dedicar nuestra
atenci�n. Por ejemplo, el siguiente c�digo recorre c�clicamente una matriz
de referencias InputStream y lee los datos a medida que le van llegando:
InputStream[] is = new InputStream[10];
...
int n=0;
for(;;){
if (is[n].available()>0){
/* Leemos los datos y los procesamos */
}
n=(++n)%10;
}
==============================
La condici�n correcta de parada es que read() devuelva -1.
int dato;
while(dato=xxx.read()!=-1){
/* ............ */
/* ............ */
}
Technical Details
Message-ID:
<01bcc9d8$51eaea00$0100007f@local.localhost>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<34279B9C.794BDF32@tsc.uvigo.es>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: 1116f3,b0d2da66eae8b046 X-Google-Attributes: gid1116f3,public From: "Chano G�mez" <no.spam.chano@ran.es> Subject: Re: Capturando stdin y stdout Date: 1997/09/27 Message-ID: <01bcc9d8$51eaea00$0100007f@local.localhost> X-Deja-AN: 276056363 References: <34279B9C.794BDF32@tsc.uvigo.es> Organization: Unisource Espana NEWS SERVER Newsgroups: es.comp.lenguajes.java