Le flux d'E/S Java fournit un mécanisme de mise en mémoire tampon via BufferedInputStream et BufferedOutputStream pour améliorer les performances de lecture et d'écriture. BufferedInputStream lit les données du flux d'entrée sous-jacent et les stocke dans un tampon interne, améliorant ainsi les performances lors des lectures fréquentes de petits blocs de données. BufferedOutputStream écrit les données dans un tampon interne et, lorsque le tampon est plein ou doit être vidé immédiatement, dans le flux de sortie sous-jacent, optimisant ainsi les performances pour les écritures peu fréquentes de blocs de données volumineux.
Mécanisme de mise en mémoire tampon des flux d'E/S Java
Présentation du mécanisme de mise en mémoire tampon
Les flux d'E/S Java fournissent un mécanisme de mise en mémoire tampon qui améliore la lecture et l'écriture en stockant des blocs de données (tampons) dans les performances de la mémoire. Lors d'une opération sur un tampon, les opérations d'E/S sont effectuées sur le tampon plutôt que directement sur le fichier ou le flux sous-jacent. Cela permet d'économiser les appels système et le temps de changement de contexte.
Implémentation du mécanisme de mise en mémoire tampon
Le mécanisme de mise en mémoire tampon dans les flux d'E/S Java est implémenté en utilisant les flux d'entrée/sortie BufferedInputStream et BufferedOutputStream. Ces flux contiennent des tampons internes pour stocker des blocs de données en mémoire.
BufferedInputStream
BufferedInputStream
lit les données et les stocke dans le tampon interne. Lorsque le tampon se remplit, le flux lit un autre bloc de données du flux d'entrée sous-jacent, remplit le tampon et renvoie le premier octet du tampon. Cela améliore les performances lors des lectures fréquentes de petits blocs de données. 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
écrit les données dans un tampon interne. Lorsque le tampon est plein ou que les données doivent être vidées immédiatement, le flux écrit les données du tampon dans le flux de sortie sous-jacent. Cela optimise les performances pour les écritures peu fréquentes sur des blocs de données volumineux, réduisant ainsi le nombre d'appels système. 🎜🎜🎜Exemple pratique🎜🎜🎜Considérez le code suivant, qui utilise BufferedInputStream
pour lire dans un fichier texte : 🎜rrreee🎜Dans cet exemple, BufferedInputStream
lit les données en morceaux Tampon interne, améliorant ainsi les performances lors des lectures fréquentes de petits blocs de données. 🎜🎜🎜Points à noter🎜🎜BufferedInputStream
et BufferedOutputStream
est spécifié via java.io.BufferedInputStream.DEFAULT_BUFFER_SIZE
(la valeur par défaut est de 8 192 octets), vous pouvez remplacer cette valeur lors de la création de l'instance de flux. 🎜flush()
, BufferedOutputStream
écrira immédiatement les données dans le tampon dans le flux de sortie sous-jacent, tandis que BufferedInputStream
Le tampon est vidé lorsque toutes les données sont lues à partir du tampon ou lorsque le flux est fermé. 🎜🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!