java - 读取大于内存的大文件怎么读?
PHP中文网
PHP中文网 2017-04-18 10:55:16
0
6
944
参考:
    有一个1G大小的一个文件,内存限制大小是10M,有序返回频数最高的50个词,该怎么做?

网上有很多该问题的解决方案,都是用分而治之的思想,提到了遍历整个文件。

那么我的问题是:
如果单纯地逐行读取大文件,算是把1G文件全都加载进内存吗?
或者说是读取大于内存的文件应该怎么读?

PHP中文网
PHP中文网

认证0级讲师

répondre à tous(6)
黄舟

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 :

内存映射

  • mmap

  • Créer un mappage de fichiers

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!