Wie wird der Puffermechanismus von Java-I/O-Streams implementiert?
Der Java-E/A-Stream bietet einen Puffermechanismus über BufferedInputStream und BufferedOutputStream, um die Lese- und Schreibleistung zu verbessern. BufferedInputStream liest Daten aus dem zugrunde liegenden Eingabestream und speichert sie in einem internen Puffer, wodurch die Leistung bei häufigen Lesevorgängen kleiner Datenblöcke verbessert wird. BufferedOutputStream schreibt Daten in einen internen Puffer und, wenn der Puffer voll ist oder sofort geleert werden muss, in den zugrunde liegenden Ausgabestream, wodurch die Leistung für seltene Schreibvorgänge großer Datenblöcke optimiert wird.
Puffermechanismus von Java-I/O-Streams
Überblick über den Puffermechanismus
Java-I/O-Streams bieten einen Puffermechanismus, der das Lesen und Schreiben durch das Speichern von Datenblöcken (Puffer) in der Speicherleistung verbessert. Bei der Arbeit an einem Puffer werden E/A-Vorgänge am Puffer und nicht direkt an der zugrunde liegenden Datei oder dem zugrunde liegenden Stream ausgeführt. Dadurch werden Systemaufrufe und Kontextwechsel eingespart.
Implementierung des Puffermechanismus
Der Puffermechanismus in Java-E/A-Streams wird mithilfe der Eingabe-/Ausgabestreams BufferedInputStream und BufferedOutputStream implementiert. Diese Streams enthalten interne Puffer zum Speichern von Datenblöcken im Speicher.
BufferedInputStream
BufferedInputStream
liest Daten ein und speichert sie im internen Puffer. Wenn der Puffer voll ist, liest der Stream einen weiteren Datenblock aus dem zugrunde liegenden Eingabestream, füllt den Puffer und gibt das erste Byte im Puffer zurück. Dies verbessert die Leistung bei häufigen Lesevorgängen kleiner Datenblöcke. BufferedInputStream
读入数据并存储在内部缓冲区中。当缓冲区填满时,流会从底层输入流中读取另一个数据块,填充缓冲区,并返回缓冲区中的第一个字节。这提高了对小数据块频繁读取的性能。
BufferedOutputStream
BufferedOutputStream
将数据写入内部缓冲区。当缓冲区已满或者需要立即刷新数据时,流将缓冲区中的数据写入底层输出流。这优化了对大数据块的不频繁写入的性能,减少了系统调用的数量。
实战案例
考虑以下代码,它使用 BufferedInputStream
读入一个文本文件:
try (BufferedInputStream in = new BufferedInputStream(new FileInputStream("input.txt"))) { byte[] buf = new byte[1024]; int bytesRead; while ((bytesRead = in.read(buf)) != -1) { System.out.write(buf, 0, bytesRead); } } catch (IOException e) { e.printStackTrace(); }
在此示例中,BufferedInputStream
将数据分块读入内部缓冲区,从而提高了对小数据块频繁读取的性能。
需要注意的点
- 缓冲区大小会影响性能。较大的缓冲区可以减少系统调用的数量,但也会消耗更多的内存。
-
BufferedInputStream
和BufferedOutputStream
类的缓冲区是通过java.io.BufferedInputStream.DEFAULT_BUFFER_SIZE
(默认为 8192 字节)指定的,您可以在构建流实例时覆盖此值。 - 当使用
flush()
方法时,BufferedOutputStream
会立即将缓冲区中的数据写入底层输出流,而BufferedInputStream
BufferedOutputStream
schreibt Daten in einen internen Puffer. Wenn der Puffer voll ist oder die Daten sofort geleert werden müssen, schreibt der Stream die Daten im Puffer in den zugrunde liegenden Ausgabestream. Dies optimiert die Leistung bei seltenen Schreibvorgängen in große Datenblöcke und reduziert die Anzahl der Systemaufrufe. 🎜🎜🎜Praktisches Beispiel🎜🎜🎜Betrachten Sie den folgenden Code, der BufferedInputStream
zum Einlesen einer Textdatei verwendet: 🎜rrreee🎜In diesem Beispiel liest BufferedInputStream
die Daten in Blöcken Interner Puffer, wodurch die Leistung bei häufigen Lesevorgängen kleiner Datenblöcke verbessert wird. 🎜🎜🎜Zu beachtende Punkte🎜🎜- Puffergröße beeinflusst die Leistung. Größere Puffer reduzieren die Anzahl der Systemaufrufe, verbrauchen aber auch mehr Speicher. 🎜
- Der Puffer für die Klassen
BufferedInputStream
undBufferedOutputStream
wird überjava.io.BufferedInputStream.DEFAULT_BUFFER_SIZE
angegeben (Standard ist 8192 Bytes), Sie können diesen Wert beim Erstellen der Stream-Instanz überschreiben. 🎜 - Bei Verwendung der Methode
flush()
schreibtBufferedOutputStream
die Daten im Puffer sofort in den zugrunde liegenden Ausgabestream, währendBufferedInputStream
Der Puffer wird geleert, wenn alle Daten aus dem Puffer gelesen wurden oder wenn der Stream geschlossen wird. 🎜🎜
Das obige ist der detaillierte Inhalt vonWie wird der Puffermechanismus von Java-I/O-Streams implementiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4
