FileInputStream, problème fin fichier
Bonsoir,
j'ai suivi un tutoriel sur les flux d'entrées/sorties.
Je voudrais ouvrir un fichier txt, pour le copier dans un autre fichier txt.
Le problème c'est que le buffer est fixé de taille 8. Si on augmente la taille du buffer, on gagne en rapidité, et au contraire si on la met à 1, on ralenti, si j'ai bien compris ?
Et donc lorsque mon fichier texte contient 14 caractères par exemple, comme ce n'est pas un multiple de 8, il me recopie bien les 14 premiers caractères, et il m'en rajoute 2 autres... pour arriver à 16..
Voici le code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| //Package à importer afin d'utiliser l'objet File
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
//Nous déclarons nos objets en dehors du bloc try/catch
FileInputStream fis;
FileOutputStream fos;
BufferedInputStream bis;
BufferedOutputStream bos;
try {
fis = new FileInputStream(new File("test.txt"));
fos = new FileOutputStream(new File("test2.txt"));
bis = new BufferedInputStream(new FileInputStream(new File("test.txt")));
bos = new BufferedOutputStream(new FileOutputStream(new File("test3.txt")));
byte[] buf = new byte[8];
//On récupère le temps du system
long startTime = System.currentTimeMillis();
while(fis.read(buf) != -1){
fos.write(buf);
}
//On affiche le temps d'exécution
System.out.println("Temps de lecture + écriture avec FileInputStream et FileOutputStream : " + (System.currentTimeMillis() - startTime));
//On réinitialise
startTime = System.currentTimeMillis();
while(bis.read(buf) != -1){
bos.write(buf);
}
//On réaffiche
System.out.println("Temps de lecture + écriture avec BufferedInputStream et BufferedOutputStream : " + (System.currentTimeMillis() - startTime));
//On ferme nos flux de données
fis.close();
bis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
} |
c'est dans test2.txt qu'il y a des problèmes, il me rajoute des caractères si la longueur du fichier de départ n'est pas un multiple de 8...
Et dans test3.txt, qui utilise un BufferedOutputStream, mon fichier test3 reste vide... est ce normal ?
Merci beaucoup.