Question

J'ai un problème similaire à ceci mec lors du traitement du fichier journal 4 Mo . En fait, je traite plusieurs fichiers simultanément, mais comme je continue à avoir cette exception, je décide de la tester uniquement pour un seul fichier:

val temp = Source.fromFile("./datasource/input.txt")
val dummy = new PrintWriter("test.txt")
var itr = 0
println("Default Buffer size: " + Source.DefaultBufSize)
try {
    for( chr <- temp) {
        dummy.print(chr.toChar)
        itr += 1
        if(itr == 75703) println("Passed line 85")
        if(itr % 256 == 0){ print("..." + itr); temp.reset; System.gc; }
        if(itr == 75703) println("Passed line 87")
        if(itr % 2048 == 0) println("")
        if(itr == 75703) println("Passed line 89")
    }
} finally {
    println("\nFalied at itr = " + itr)
}

Ce que j’obtiens toujours, c’est qu’il échouera à la valeur = 75703, alors que mon fichier de sortie sera toujours à 64 Ko (65 536 octets exactement). Peu importe où je mets temp.reset ou System.gc, toutes les expériences sont identiques.

Il semble que le problème repose sur une allocation de mémoire, mais je ne trouve aucune information utile sur ce problème. Une idée sur la façon de résoudre ce problème?

Toutes vos aides sont grandement appréciées

EDIT: En fait, je souhaite le traiter sous forme de fichiers binaires. Cette technique n’est donc pas une bonne solution. Beaucoup m’avaient recommandé d’utiliser BufferedInputStream à la place.

Était-ce utile?

La solution

Pourquoi appelez-vous reset sur Source avant la fin de son itération dans le fichier?

val temp = Source.fromFile("./datasource/input.txt")
try {
  for (line <- tem p.getLines) {
    //whatever
  }
finally temp.reset     

Devrait fonctionner correctement sans fondations. Voir aussi cette question

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top