No, no es debido a la API javax.xomm. Rxtx puede usarse a través de esa API o no por cierto.
internos RXTX son un poco diferente/extraña y aunque tiene algunos errores. Versión corta, así es como se supone que funciona: Tiene dos parámetros para jugar: tiempo de espera y umbral. De acuerdo con el ajuste del código fuente el tiempo de espera a 0 (ninguno) y el umbral a 1 (que requiere al menos 1 byte antes de regresar) debería darnos normal, por InputStream definido, lecturas de bloqueo.
El problema es que incluso cuando su puesta en marcha como esto hay un error en la versión estable actual (2.1.7r2). El parámetro de umbral siempre se establece en 0! A partir del código fuente:
/* PRUEBA ttyset.c_cc [VMIN] = umbral; */ ttyset.c_cc [VMIN] = 0;
La parte confusa es que esto también fue el caso en 2004 e informó acerca de la lista de correo y fijo, sino que era o no realmente fijo o ha regresado de nuevo (una regresión). En realidad, hay un nuevo informe de error que por alguna razón no pude encontrar al principio. Eventualmente descubrí que iba a arrojar el código fuente del paquete de prelanzamiento y encontré un registro de cambios no publicado (la página web no muestra los registros de cambios después de la última versión estable, aunque está disponible en CVS).
Solución
- Se fija en la cabeza, para que pueda utilizar la última versión preliminar (2,2-series) o compilar desde CVS.
Hacer una solución fea a lo largo de las líneas de:
int read(InputStream in) throws IOException {
int b;
while ((b=in.read()) == -1) {
try { Thread.sleep(10); } catch (InterruptedException e) { }
}
return b;
}
entonces usted: read(in)
en lugar de in.read()
.
De hecho, me escribió hace a blog entry about this 2 años, así que no se olvide.
El diseño de RXTX deja mucho que desear. Es posible que desee echar un vistazo a mi biblioteca alternativa: http://code.google.com/p/jperipheral/ – Gili