OVH Cloud OVH Cloud

URGENT : probleme avec objet OutPutStream

1 réponse
Avatar
hatoug
voila le code en question :
public void returnFile(String Filename, OutputStream out)
throws FileNotFoundException, IOException {
//un FileInputStream est pour les octets
FileInputStream fis = null;
try {
fis = new FileInputStream(Filename);
//un buffer de 64 Kilo-Octets
byte[] buf = new byte[64000];
int bytesRead;
while ((bytesRead = fis.read(buf)) > 0)
{
try
{
out.write(buf, 0, bytesRead);
}
catch (java.net.SocketException ex)
{
System.out.println("Pb : java.net.SocketException dans
BeanVisuDoc.returnFile : " + ex.getMessage());
}
}
} finally {
if(fis != null) fis.close();
}
}

Il s agit d une fonction qui va afficher un fichier à l ecran.

En fait, parfois ca fonctionne tres bien et parfois j ai l erreur
suivante :
"connection reset by peer : socket write error"

Cette erreur apparait lorsque l on arrive à la fin du fichier cad
lorsque bytesRead est inférieur à buf.

quelqu un aurait-il une idee de la provenance de cette erreur ?

Merci d avance pour votre aide.

Michel.

1 réponse

Avatar
Thomas Luyt

bonsoir

voila le code en question :
public void returnFile(String Filename, OutputStream out)
throws FileNotFoundException, IOException {
//un FileInputStream est pour les octets
FileInputStream fis = null;
try {
fis = new FileInputStream(Filename);
//un buffer de 64 Kilo-Octets
byte[] buf = new byte[64000];
int bytesRead;
while ((bytesRead = fis.read(buf)) > 0)


ici je pense qu'il vaut mieux tester sur fis.read(buf) != -1, -1
correspondant à la fin du flux.

[...]


Cette erreur apparait lorsque l on arrive à la fin du fichier cad
lorsque bytesRead est inférieur à buf.

quelqu un aurait-il une idee de la provenance de cette erreur ?


je pense que tu dimensionnes mal ton buffer.
Un tampon de 4096 octets (4 kilo octets) devrait largement suffire.
J'ai utilisé avec profit les exemples donnés dans l'article suivant
http://www.onjava.com/pub/a/onjava/excerpt/jebp_3/index1.html?page=2 (et
ses suites), en particulier pour créer une servlet forçant le
téléchargement de fichiers. En conservant la taille de buffer de 4 Ko,
ça fonctionne très bien même avec des gros fichiers (900 Ko et +)


Merci d avance pour votre aide.

Michel.


--
Thomas