Heim Java javaLernprogramm Wie wird der Puffermechanismus von Java-I/O-Streams implementiert?

Wie wird der Puffermechanismus von Java-I/O-Streams implementiert?

Apr 13, 2024 pm 03:06 PM
java Ich

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.

Java I/O流的缓冲机制是如何实现的?

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();
}
Nach dem Login kopieren

在此示例中,BufferedInputStream 将数据分块读入内部缓冲区,从而提高了对小数据块频繁读取的性能。

需要注意的点

  • 缓冲区大小会影响性能。较大的缓冲区可以减少系统调用的数量,但也会消耗更多的内存。
  • BufferedInputStreamBufferedOutputStream 类的缓冲区是通过 java.io.BufferedInputStream.DEFAULT_BUFFER_SIZE (默认为 8192 字节)指定的,您可以在构建流实例时覆盖此值。
  • 当使用 flush() 方法时,BufferedOutputStream 会立即将缓冲区中的数据写入底层输出流,而 BufferedInputStream
BufferedOutputStream🎜🎜🎜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 und BufferedOutputStream wird über java.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() schreibt BufferedOutputStream die Daten im Puffer sofort in den zugrunde liegenden Ausgabestream, während BufferedInputStream 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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

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

Zufallszahlengenerator in Java Zufallszahlengenerator in Java Aug 30, 2024 pm 04:27 PM

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

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

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.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

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

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

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.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

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

Zeitstempel für Datum in Java Zeitstempel für Datum in Java Aug 30, 2024 pm 04:28 PM

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.

Java -Programm, um das Kapselvolumen zu finden Java -Programm, um das Kapselvolumen zu finden Feb 07, 2025 am 11:37 AM

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

See all articles