1. Über InputStream.read ()
Beim Lesen von Daten aus einem Datenstrom ist das Diagramm einfach und die Methode für InputStream.read () wird häufig verwendet. Diese Methode soll nur ein Byte aus dem Stream nacheinander lesen, was sehr ineffizient ist. Ein besserer Weg ist die Verwendung des InputStream.read (Byte [] b) oder InputStream.read (Byte [] b, int Off, int len), um mehrere Bytes gleichzeitig zu lesen.
2. Über die Methode Aught () der InputStream -Klasse
Beim Lesen mehrerer Bytes wird häufig die Methode für InputStream.Available () verwendet. Es ist zu beachten, dass diese Methode, wenn sie zum Lesen von Daten aus lokalen Dateien verwendet werden, im Allgemeinen keine Probleme begegnen. Wenn sie jedoch für Netzwerkoperationen verwendet wird, stoßen sie häufig auf einige Probleme. Wenn Socket beispielsweise kommuniziert, hat die andere Partei eindeutig 1.000 Bytes gesendet, aber sein Programm nennt die verfügbare () Methode nur 900 oder 100 oder sogar 0. Sie fühlt sich etwas unerklärlich an und kann den Grund nicht finden. In der Tat liegt dies daran, dass die Netzwerkkommunikation häufig intermittierend ist und häufig eine Reihe von Bytes in mehreren Chargen gesendet wird. Das lokale Programm ruft die verfügbare Methode () auf, erhält manchmal 0. Dies kann daran liegen, dass die andere Partei noch nicht geantwortet hat, oder dass dies daran liegen kann, dass die andere Partei geantwortet hat, die Daten jedoch nicht an die Region geliefert wurden. Die andere Partei hat Ihnen 1.000 Bytes gesendet, und vielleicht ist sie in 3 Chargen angekommen.
Wenn Sie den Code wie diesen schreiben:
int count = in.Available ();
Bei der Durchführung von Netzwerkoperationen gibt es häufig Fehler, da die an die Send gesendeten Daten, wenn Sie die verfügbare () -Methode aufrufen, möglicherweise noch nicht angekommen, und die Anzahl, die Sie erhalten, beträgt 0.
Müssen es so ändern:
int count = 0;
3. Über InputStream.read (Byte [] B) und InputStream.read (Byte [] B, int Off, int len)
Beide Methoden werden verwendet, um mehrere Bytes aus einem Stream zu lesen. Beispielsweise hoffen Programmierer bei der ersten Methode oft, dass das Programm B.Length -Bytes lesen kann, aber die tatsächliche Situation ist, dass das System oft nicht so viele lesen kann. Nachdem Sie die Anweisungen für Java -API sorgfältig gelesen haben, werden Sie feststellen, dass diese Methode nicht garantiert, dass sie so viele Bytes lesen kann. Sie kann nur garantieren, dass sie bis zu so vielen Bytes (mindestens 1) lesen kann. Wenn Sie möchten, dass das Programm Count -Bytes liest, verwenden Sie den folgenden Code am besten:
Byte [] B = neuer Byte [count]; ;
Dieser Code kann sicherstellen, dass die Zählung von Bytes gelesen wird, es sei denn, in der Mitte oder am Ende des Datenstroms (EOFException) wird eine IO -Ausnahme aufgetreten.
4. Beispiel für das Lesen von PowerPoint -Dateien
Java.io.inputStream; hslf .model.slide; SlideShow SS = NEU SLIDESHOW (New HSLFSLIDeshow (IS)); // IS der InputStream der Datei, erstellen Sie Diashow Slide [] Slides = ss.getSlides (); // jede Folie für (int i = 0; i <i < Slides.Length; i ++) {textrun [] t = glides [i] .gettextruns (); // Um den Textinhalt der Folie zu erhalten, erstellen Sie Textrun für (int j = 0; j <t.Length; j ++ ) {content .Append (t [j] .GETTEXT ()); // Hier wird der Textinhalt dem Inhalt} content.Append (Slides [i] .gettitle ()) hinzugefügt; Titel, Inhalt .ToString ());