Parce que le système d'exploitation doit isoler l'espace utilisateur et l'espace système pour protéger la sécurité des données, pour être précis, lorsque le système d'exploitation lit un fichier, il lit le fichier dans l'espace système puis le copie vers l'utilisateur de l'application. processus. Espace, c'est-à-dire le propre tampon du programme comme mentionné dans la question. Si le processus utilisateur est autorisé à accéder directement au tampon de l'espace du système d'exploitation, le système d'exploitation ne serait-il pas dangereux ?
FileInputStream/FileOutputStream déclenchera une opération IO à chaque fois que read()/write() est appelé. BufferedInputStream/BufferedOutputSteam appelant read()/write() ne déclenchera pas d'opération IO à chaque fois. Il écrit simplement dans le tampon interne. L'opération IO ne sera déclenchée que lorsque le tampon interne est plein ou que flush() est appelé. .
Moins il y a d'opérations d'E/S, meilleures sont les performances.
Lors des opérations d'E/S, la JVM créera un tableau d'octets en tant que tampon dans son propre espace de tas. Généralement, les utilisateurs ne peuvent pas appeler directement la mémoire (directbuffer) via la JVM. L'interaction entre le tampon d'espace de tas et la mémoire est gérée par. la JVM. De cette façon, nous pouvons profiter des avantages de la JVM, tels que le mécanisme GC et l'API encapsulée de haut niveau Java.
Le système d'exploitation lira non seulement les fichiers du disque dur dans la mémoire et les utilisera comme cache, mais ouvrira également un autre espace dans la mémoire pour mettre en cache les données dans la mémoire. A quoi ça sert ? Pour la gestion et l’efficacité. Le taux d'échange de données entre la mémoire et la mémoire est deux ordres de grandeur supérieur au taux d'échange de données entre la mémoire et le disque dur. Lorsqu'un processus sur la mémoire a besoin de données, s'il y a des données correspondantes dans le cache mémoire, elles seront récupérées directement depuis la zone de cache Sinon, elles seront lues à partir du disque dur. (Il en va de même pour l'écriture)
L'importance de la conception du cache de Java pour les opérations d'E/S est également présente. La différence est que les données mises en cache par Java ne peuvent être utilisées que par l'environnement d'exécution actuel de Java. Par rapport à la récupération fréquente des données du cache du système d'exploitation, cela améliore l'efficacité de l'exécution Cela est particulièrement vrai lorsque votre code nécessite des opérations d'E/S fréquentes.
La plupart des soi-disant tampons sont encapsulés dans la zone d'interface par le matériel du disque dur, et la zone tampon n'est pas grande. Le système d'exploitation ne met pas en cache le contenu des fichiers dans la mémoire.
Parce que le système d'exploitation doit isoler l'espace utilisateur et l'espace système pour protéger la sécurité des données, pour être précis, lorsque le système d'exploitation lit un fichier, il lit le fichier dans l'espace système puis le copie vers l'utilisateur de l'application. processus. Espace, c'est-à-dire le propre tampon du programme comme mentionné dans la question. Si le processus utilisateur est autorisé à accéder directement au tampon de l'espace du système d'exploitation, le système d'exploitation ne serait-il pas dangereux ?
FileInputStream/FileOutputStream déclenchera une opération IO à chaque fois que read()/write() est appelé.
BufferedInputStream/BufferedOutputSteam appelant read()/write() ne déclenchera pas d'opération IO à chaque fois. Il écrit simplement dans le tampon interne. L'opération IO ne sera déclenchée que lorsque le tampon interne est plein ou que flush() est appelé. .
Moins il y a d'opérations d'E/S, meilleures sont les performances.
Lors des opérations d'E/S, la JVM créera un tableau d'octets en tant que tampon dans son propre espace de tas. Généralement, les utilisateurs ne peuvent pas appeler directement la mémoire (directbuffer) via la JVM. L'interaction entre le tampon d'espace de tas et la mémoire est gérée par. la JVM. De cette façon, nous pouvons profiter des avantages de la JVM, tels que le mécanisme GC et l'API encapsulée de haut niveau Java.
Le système d'exploitation lira non seulement les fichiers du disque dur dans la mémoire et les utilisera comme cache, mais ouvrira également un autre espace dans la mémoire pour mettre en cache les données dans la mémoire.
A quoi ça sert ? Pour la gestion et l’efficacité.
Le taux d'échange de données entre la mémoire et la mémoire est deux ordres de grandeur supérieur au taux d'échange de données entre la mémoire et le disque dur.
Lorsqu'un processus sur la mémoire a besoin de données, s'il y a des données correspondantes dans le cache mémoire, elles seront récupérées directement depuis la zone de cache
Sinon, elles seront lues à partir du disque dur. (Il en va de même pour l'écriture)
L'importance de la conception du cache de Java pour les opérations d'E/S est également présente.
La différence est que les données mises en cache par Java ne peuvent être utilisées que par l'environnement d'exécution actuel de Java.
Par rapport à la récupération fréquente des données du cache du système d'exploitation, cela améliore l'efficacité de l'exécution
Cela est particulièrement vrai lorsque votre code nécessite des opérations d'E/S fréquentes.
La plupart des soi-disant tampons sont encapsulés dans la zone d'interface par le matériel du disque dur, et la zone tampon n'est pas grande. Le système d'exploitation ne met pas en cache le contenu des fichiers dans la mémoire.
Parce que votre disque dur n'est pas assez rapide !