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 :
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...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(); } } }
Et dans test3.txt, qui utilise un BufferedOutputStream, mon fichier test3 reste vide... est ce normal ?
Merci beaucoup.
Partager