1. À propos de InputStream.read ()
Lors de la lecture des données d'un flux de données, le graphique est simple et la méthode InputStream.Read () est souvent utilisée. Cette méthode consiste à lire un seul octet du flux à la fois, ce qui sera très inefficace. Une meilleure façon consiste à utiliser la méthode InputStream.Read (byte [] b) ou inputStream.read (byte [] b, int off, int len) pour lire plusieurs octets à la fois.
2. À propos de la méthode disponible () de la classe InputStream
Lors de la lecture de plusieurs octets à la fois, la méthode InputStream.Vailable () est souvent utilisée. Il convient de noter que si cette méthode est utilisée pour lire les données des fichiers locaux, il ne rencontrera généralement pas de problèmes, mais s'il est utilisé pour les opérations de réseau, il rencontrera souvent des problèmes. Par exemple, lorsque Socket communique, l'autre partie a clairement envoyé 1 000 octets, mais son programme appelle la méthode disponible () n'obtient que 900, ou 100, ou même 0. Il semble un peu inexplicable et ne peut pas trouver la raison. En fait, cela est dû au fait que la communication du réseau est souvent intermittente, et une chaîne d'octets est souvent envoyée en plusieurs lots. Le programme local appelle la méthode disponible () obtient parfois 0. Cela peut être dû au fait que l'autre partie n'a pas encore répondu, ou cela peut être dû au fait que l'autre partie a répondu, mais les données n'ont pas été fournies à la région. L'autre partie vous a envoyé 1 000 octets, et peut-être qu'il est arrivé en 3 lots.
Si vous écrivez le code comme ceci:
int count = in.available ();
Il y a souvent des erreurs lors de l'exécution des opérations de réseau, car lorsque vous appelez la méthode disponible (), les données envoyées à l'envoi ne sont peut-être pas encore arrivées et le nombre que vous obtenez est de 0.
Besoin de le changer comme ceci:
int count).
3. sur inputStream.read (byte [] b) et inputStream.read (byte [] b, int off, int len)
Les deux méthodes sont utilisées pour lire plusieurs octets à partir d'un flux. Par exemple, dans la première méthode, les programmeurs espèrent souvent que le programme peut lire les octets B.Length, mais la situation réelle est que le système ne peut souvent pas en lire autant. Après avoir soigneusement lu les instructions de l'API Java, vous constaterez que cette méthode ne garantit pas qu'elle peut lire autant d'octets, il peut seulement garantir qu'il peut lire autant d'octets (au moins 1). Par conséquent, si vous voulez que le programme lise les octets de comptage, il est préférable d'utiliser le code suivant:
BYTE [] B = NOUVEAU BYTE [COUNT]; ;
Ce code peut garantir que les octets de comptage sont lus à moins qu'une exception IO ne soit rencontrée au milieu ou à la fin du flux de données (EofException)
4. Exemple de lecture de fichiers PowerPoint
Importer java.io.inputStream; HSLF .Model.slide; Diaporama ss = nouveau diaporama (nouveau hslfslideshow (iS)); // est le stream inputStream du fichier, créez une diapositive de diaporama [] Slides = ss.getsLides (); // Obtenez chaque diapositive pour (int i = 0; i <i < Slides.length; i ++) {textrun [] t = Slides [i] .gettexTruns (); // Afin d'obtenir le contenu texte de la diapositive, créez Textrun pour (int j = 0; j <t.length; j ++ ) {Content .Apnd (t [j] .getText ()); // Le contenu texte sera ajouté au contenu} contenu.append (Slides [i] .getTitle ());} index.addindex (URL, Titre, Content .ToString ());} Catch (exception ex) {System.out.println (ex.ToString ());