🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.lenguajes.java
Article #29906

Re: Capturando stdin y stdout

#29906
From: Chano G�mez
Date: Sat, 27 Sep 1997 00:00
73 lines
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-mail
References: <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