Je dois travailler avec de gros fichiers (plusieurs Go) et j'ai besoin de recherches rapides pour récupérer des lignes spécifiques sur demande.Sauter à une ligne et la lire
L'idée a été de maintenir une cartographie:
some_key -> byte_location
Lorsque l'emplacement d'octet représente l'endroit où dans le fichier de la ligne commence.
Edit: la question a changé un peu:
D'abord, j'utilisé:
FileInputStream stream = new FileInputStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
FileChannel channel = stream.getChannel();
je remarquai que FileChannel.position()
ne reviendra pas la position exacte où le lecteur est en train de lire, car il est un « tampon "lecteur. Il lit des morceaux d'une taille donnée (16k ici) donc ce que je reçois du FileChannel est un multiple de 16k, et non la position exacte où le lecteur lit réellement.
PS: le fichier est en UTF-8
Quel est le codage de votre fichier? –
Quelle est la question? Comment sauter à une position donnée dans le flux d'entrée? 'in.skip (pos);' Ou comment trouver la position désirée pour sauter à lire toute la ligne, et non une partie? – khachik