Java InputStream-Klasse
InputStream ist eine abstrakte Basisklasse im Java-I/O-System zum Lesen von Byte-Daten, die sich befindet injava.iodem Paket.
InputStream ist die Elternklasse aller Byte-Eingabestreams und stellt ein grundlegendes Framework zum Lesen von Byte-Daten bereit.
InputStream ist eine abstrakte Klasse, was bedeutet, dass Sie sie nicht direkt instanziieren können, aber Sie können konkrete Eingabestream-Objekte über ihre Unterklassen erstellen (wie FileInputStream, ByteArrayInputStream usw.).
Kernmethodenanalyse
InputStream ist Teil der Java-IO-Streams und wird zum Lesen von Daten in Bytes (8-Bit) verwendet.
InputStream eignet sich zur Verarbeitung von Nicht-Text-Daten, wie Bildern, Audio, Video, komprimierten Dateien usw.
Sie können es sich als ein "Wasserrohr" vorstellen, bei dem Daten wie Wasser von der Quelle zu Ihrem Programm fließen.

Kernmethoden
| Methodenname | Beschreibung |
|---|---|
int read() | Liest ein Byte, der Rückgabewert ist ein int von 0 bis 255, gibt zurück, wenn das Ende des Streams erreicht ist-1 |
int read(byte[] b) | Liest höchstens aus dem Streamb.lengthBytes an Daten und speichert sie in einem Byte-Arrayb |
int read(byte[] b, int off, int len) | fromoffLiest höchstens ab der Offset-PositionlenBytes in das Arrayb |
void close() | Schließt den Stream und gibt zugehörige Ressourcen frei |
Ein einzelnes Byte lesen
Dies ist die grundlegendste Methode in InputStream, mit der das nächste Datenbyte aus dem Eingabestream gelesen wird. Der Rückgabewert ist ein int zwischen 0 und 255, und -1 wird zurückgegeben, wenn das Ende des Streams erreicht ist.
Beispielcode
Beispiel
int data = input.read();
while(data != -1) {
System.out.print((char)data);
data = input.read();
}
input.close();
Byte-Array lesen
Beispiel
Diese Methode versucht, bis zu b.length Bytes an Daten in ein Byte-Array zu lesen, und gibt die tatsächliche Anzahl der gelesenen Bytes zurück oder -1, wenn das Ende des Streams erreicht ist.
Beispielcode
Beispiel
byte[] buffer = new byte[1024];
int bytesRead;
while((bytesRead = input.read(buffer)) != -1) {
System.out.println("Read " + bytesRead + " bytes");
}
input.close();
, bis zu 500 Bytes lesen
Beispiel
Mit dieser Methode können Sie die Position (off) angeben, an der die gelesenen Daten gespeichert werden sollen, und die maximale Anzahl der zu lesenden Bytes (len).
Beispielcode
Beispiel
byte[] buffer = new byte[1024];
int bytesRead = input.read(buffer, 10, 500); // Speichern beginnend bei buffer
input.close();
Bytes überspringen
Beispiel
Überspringt und verwirft n Bytes an Daten im Eingabestream und gibt die tatsächliche Anzahl der übersprungenen Bytes zurück.
Verfügbare Bytes prüfen
Beispiel
Gibt eine Schätzung der Anzahl an Bytes zurück, die aus diesem Eingabestream gelesen (oder übersprungen) werden können, ohne zu blockieren.
2.6 Stream schließen
Beispiel
Schließt den Eingabestream und gibt alle damit verbundenen Systemressourcen frei. Dies ist eine sehr wichtige Methode und sollte nach Abschluss der Stream-Operationen aufgerufen werden.
Einführung in gängige Unterklassen
- FileInputStream: Wird verwendet, um Daten aus Dateien zu lesen.
- ByteArrayInputStream: Ermöglicht die Verwendung eines Byte-Arrays im Speicher als Eingabestream.
- FilterInputStream: Eine Dekorator-Klasse, die anderen Eingabestreams zusätzliche Funktionalität bietet.
- ObjectInputStream: Wird verwendet, um Objekte zu deserialisieren, die zuvor mit ObjectOutputStream serialisiert wurden.
- PipedInputStream: Wird zusammen mit PipedOutputStream verwendet, um eine Pipe-Kommunikation zwischen Threads zu implementieren.
Best Practices
try-with-resources verwenden
Java 7 führte die try-with-resources-Anweisung ein, die Ressourcen, die die AutoCloseable-Schnittstelle implementieren, automatisch schließen kann.
Beispiel
int data;
while ((data = input.read()) != -1) {
System.out.print((char)data);
}
} catch (IOException e) {
e.printStackTrace();
}
Gepuffertes Lesen für bessere Leistung
Bei großen Dateien oder häufigen Lesevorgängen wird empfohlen, mit BufferedInputStream zu umschließen, um die Leistung zu verbessern.
Beispiel
// Lesevorgang
} catch (IOException e) {
e.printStackTrace();
}
Ausnahmen ordnungsgemäß behandeln
IO-Operationen können IOException auslösen, und diese Ausnahmen sollten ordnungsgemäß behandelt werden.
5. FAQ
Warum gibt die Methode read() int statt byte zurück?
Weil ein spezieller Wert (-1) benötigt wird, um das Ende des Streams anzuzeigen, und der Typ byte -1 nicht darstellen kann.
Wie konvertiert man InputStream in String?
Beispiel
try (BufferedReader reader = new BufferedReader(new InputStreamReader(input))) {
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
}
return stringBuilder.toString();
}
}
Wie kopiert man InputStream?
InputStream kann normalerweise nur einmal gelesen werden. Wenn mehrere Lesevorgänge erforderlich sind, können Sie seinen Inhalt in ein Byte-Array oder ByteArrayInputStream kopieren.
6. Zusammenfassung
Die Klasse InputStream ist eine der Kernkomponenten des Java-I/O-Systems und bietet grundlegende Funktionen zum Lesen von Byte-Daten. Das Verständnis von InputStream und seinen Unterklassen ist entscheidend für den Umgang mit verschiedenen Eingabequellen (wie Dateien, Netzwerkverbindungen, Speicherpuffern usw.). In praktischen Anwendungen sollte auf Ressourcenverwaltung, Ausnahmebehandlung und Leistungsoptimierung geachtet werden.
Andere Erweiterungen