Ici la mémoire est comme un tuyau. La lecture ligne par ligne consiste simplement à faire passer le fichier 1G dans la mémoire. 10M représente l'épaisseur du tuyau. Ainsi, la lecture ligne par ligne nécessite 1 Go de 加载进去过 mémoire de fichier.
try (BufferedReader in = new BufferedReader(new FileReader(file))) {
String line;
while ((line = in.readLine()) != null) {
// parse line
}
}
Peu importe la taille du fichier, tant que la longueur de chaque ligne est limitée, la lecture de l'intégralité du fichier prendra beaucoup de temps, mais cela ne prendra pas trop de mémoire.
Lire en morceaux, lire un ensemble de résultats pour chaque morceau et enfin agréger l'ensemble de résultats Lors du traitement du texte, il sera préférable de connaître le nombre de lignes
linuxIl existe une commande ci-dessus appelée split qui peut diviser rapidement et simultanément un texte volumineux en petits fichiers, puis le traitement est pratique. Cet algorithme est appelé tri externe
La mémoire est comme du papier brouillon. Lorsque vous avez fini d'écrire un article, retournez-le. Les données utilisées et inutilisées sont jetées.
Un exemple simple, créez une variable buff, définissez sa taille, ouvrez le flux de fichiers et remplissez-le. Une fois rempli, vérifiez le contenu souhaité. S'il est trouvé, il sera compté dans une autre variable. Effacez ensuite le buff et continuez à charger le contenu à la position précédemment lue... Jusqu'à ce que la lecture soit terminée, les statistiques sont complétées.
Pour différents systèmes, une API sera fournie pour faire fonctionner les fichiers plus grands que la mémoire, c'est-à-dire que le fichier sera traité comme de la mémoire :
Ici la mémoire est comme un tuyau. La lecture ligne par ligne consiste simplement à faire passer le fichier 1G dans la mémoire. 10M représente l'épaisseur du tuyau.
Ainsi, la lecture ligne par ligne nécessite 1 Go de
加载进去过
mémoire de fichier.Peu importe la taille du fichier, tant que la longueur de chaque ligne est limitée, la lecture de l'intégralité du fichier prendra beaucoup de temps, mais cela ne prendra pas trop de mémoire.
Lire en morceaux, lire un ensemble de résultats pour chaque morceau et enfin agréger l'ensemble de résultats
Lors du traitement du texte, il sera préférable de connaître le nombre de lignes
.linux
Il existe une commande ci-dessus appeléesplit
qui peut diviser rapidement et simultanément un texte volumineux en petits fichiers, puis le traitement est pratique. Cet algorithme est appelé tri externeLa mémoire est comme du papier brouillon. Lorsque vous avez fini d'écrire un article, retournez-le. Les données utilisées et inutilisées sont jetées.
Un exemple simple, créez une variable buff, définissez sa taille, ouvrez le flux de fichiers et remplissez-le. Une fois rempli, vérifiez le contenu souhaité. S'il est trouvé, il sera compté dans une autre variable. Effacez ensuite le buff et continuez à charger le contenu à la position précédemment lue... Jusqu'à ce que la lecture soit terminée, les statistiques sont complétées.
Pour différents systèmes, une API sera fournie pour faire fonctionner les fichiers plus grands que la mémoire, c'est-à-dire que le fichier sera traité comme de la mémoire :
内存映射
mmap
Créer un mappage de fichiers