Hola a todos. Estoy tratando de buscar una forma de evitar el bloqueo que se produce al llamar al método read() cuando se usa un objeto SocketConnection (j2me) o Socket (java). Estoy usando j2me en este momento pero igual se extiende lo mismo usando java. Por el momento el metodo available() no me sirve de mucho ya que en su mayoria devuelve cero. Esto era una buena alternativa para leer cuantos datos hay disponibles y asi evitar el bloqueo pero la descarto. Por otra parte esta el método read(byte[],position,length). Es casi lo mismo que read() pero se leen varios bytes en el array.
El siguiente codigo podria funcionar muy bien pero no se puede utilizar is.available(). Además este metodo proceso() esta ejecutandose dentro de un hilo.
Y el siguiente codigo que por cierto es ineficiente igual puede bloquearse en la linea is.read() segun lo que probe.
Eh notado que si el procesamiento es mas lento se bloquee porque quizas no esten los datos rapidamente disponibles. En cambio si ya estan entonces no se bloquearia en la linea de is.read(). Solo es una observación. Nose como hacen realmente las aplicaciones de este tipo.
Espero que me puedan ayudar a buscar una forma para evitar este bloqueo.
Desde ya muchas gracias.
Saludos.[/color]
El siguiente codigo podria funcionar muy bien pero no se puede utilizar is.available(). Además este metodo proceso() esta ejecutandose dentro de un hilo.
Código (java) [Seleccionar]
public void proceso(){
try {
int d=is.available();
if(d!=0){
byte[] bytes=new byte[d];
int offset=0;
while(offset<bytes.length){
int value=is.read(bytes,offset, d);
if(value==-1)break;
offset+=value;
}
int i=0;
while(i<bytes.length){
System.out.print((char)bytes[i]);
i++;
}
}
} catch (IOException ex) {
}
}
Y el siguiente codigo que por cierto es ineficiente igual puede bloquearse en la linea is.read() segun lo que probe.
Código (java) [Seleccionar]
public void proceso1(){
try {
int d=is.read();
while(d!=-1){
System.out.println((char)d);
d=is.read();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
Una forma mas eficiente de esto para leer que hize fue leer con el metodo read(byte[],position,length). Pero aún se bloquea.
Eh notado que si el procesamiento es mas lento se bloquee porque quizas no esten los datos rapidamente disponibles. En cambio si ya estan entonces no se bloquearia en la linea de is.read(). Solo es una observación. Nose como hacen realmente las aplicaciones de este tipo.
Espero que me puedan ayudar a buscar una forma para evitar este bloqueo.
Desde ya muchas gracias.
Saludos.[/color]