1. Acerca de InputStream.read ()
Al leer datos de un flujo de datos, el gráfico es simple y el método inputStream.read () a menudo se usa. Este método es leer solo un byte de la transmisión a la vez, que será muy ineficiente. Una mejor manera es usar el método InputStream.Read (Byte [] b) o InputStream.read (Byte [] b, int OFF, int Len) para leer múltiples bytes a la vez.
2. Acerca del método disponible () de la clase InputStream
Al leer múltiples bytes a la vez, el método InputStream.available () a menudo se usa. Cabe señalar que si este método se usa para leer datos de archivos locales, generalmente no encontrará problemas, pero si se usa para operaciones de red, a menudo encontrará algunos problemas. Por ejemplo, cuando Socket se está comunicando, la otra parte claramente envió 1,000 bytes, pero su programa llama al método disponible () solo obtiene 900, o 100, o incluso 0. Se siente un poco inexplicable y no puede encontrar la razón. De hecho, esto se debe a que la comunicación de red a menudo es intermitente, y una cadena de bytes a menudo se envía en varios lotes. El programa local llama al método disponible () a veces obtiene 0. Esto puede deberse a que la otra parte aún no ha respondido, o puede deberse a que la otra parte ha respondido, pero los datos no se han entregado al área local. La otra parte le envió 1,000 bytes, y tal vez llegó en 3 lotes.
Si escribe el código así:
int count = in.available ();
A menudo hay errores al realizar operaciones de red porque cuando llama al método disponible (), los datos enviados al envío pueden no haber llegado todavía, y el recuento que obtiene es 0.
Necesito cambiarlo así:
int count = 0;
3. Acerca de InputStream.Read (Byte [] B) y InputStream.Read (Byte [] B, int OFF, int Len)
Ambos métodos se utilizan para leer múltiples bytes de una transmisión. Por ejemplo, en el primer método, los programadores a menudo esperan que el programa pueda leer B. Longitud Bytes, pero la situación real es que el sistema a menudo no puede leer tantos. Después de leer cuidadosamente las instrucciones de la API de Java, encontrará que este método no garantiza que pueda leer tantos bytes, solo puede garantizar que pueda leer hasta tantos bytes (al menos 1). Por lo tanto, si desea que el programa lea bytes de conteo, es mejor usar el siguiente código:
byte [] b = nuevo byte [count]; ;
Este código puede garantizar que se lean los bytes de conteo a menos que se encuentre una excepción de IO en el medio o en el final del flujo de datos (EOFException)
4. Ejemplo de lectura de archivos de PowerPoint
import java.io.inputstream; hslf .model.slide; Slid -show ss = new Slideshow (new hslfslideshow (is)); // es la entrada de entrada del archivo, cree diapositivas de presentación de diapositivas [] diapositivas = ss.getslides (); // Obtenga cada diapositiva para (int i = 0; i << slides.length; i ++) {textrun [] t = slides [i] .gettextruns (); // Para obtener el contenido de texto de la diapositiva, cree textrun para (int j = 0; j <t.length; j ++ ) {content .append (t [j] .gettext ()); // Aquí el contenido de texto se agregará al content} content.append (diapositivas [i] .gettitle ()); Título, contenido .tostring ());