Bonjour,

J'ai un souci pour connaitre l'état d'écriture d'un fichier.
Plus clairement, j'ai une appli qui permet de compresser des fichiers quelconques.

Au niveau de l’écriture je fais un read de 1024 sur le fichier et j'écris ces 1024 octets dans mon archive. C'est très rapide.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
static private void generateArchive(OutputStream out, InputStream in) throws IOException
	{
		byte buf[] = new byte[1024];
 
		try {
			for (int len = 0; (len = in.read(buf)) > 0;)
				out.write(buf, 0, len);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			in.close();
		}
	}
J'ai ensuite voulu connaitre la progression(en %) de l'archive pour pouvoir en informer l'utilisateur et mon premier réflexe fut de faire un read de 1:

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
 
static private void generateArchive(OutputStream out, InputStream in, int fileLen) throws IOException
	{
		byte buf[] = new byte[1]; // buffer
		int prog; // progression
 
		try {
			for (int len = 0, ct = 0; (len = in.read(buf)) > 0; ++ct) { // ct => counter; len => lenght
				out.write(buf, 0, len);
				prog = Math.round(((float)ct/ (float)fileLen) * 100);
                                // prog étant la valeur en pourcentage a ce stade  (exemple: 50 %)
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			in.close();
		}
	}
Mais comme vous pouvez vous en doutez, non seulement le read(1) est moche mais il est surtout 1024 fois plus lent.
Donc est-ce que vous auriez un autre moyen de connaitre le l’état actuelle d’écriture sans perdre trop de vitesse ?

merci.