Bonjour,

    En réalité, le petit morceau de programme ci-dessous marche très bien.
    La propriété FICHIER vient d'un formulaire posté avec l'encryptage multipart/form-data.
    J'ai testé la robustesse de mon programme en réseau sur un zip de 10Mo qui contenait un fichier
de 140Mo et à la décompression, les deux fichiers non zippés sont strictement identiques...

    Mon problème est juste que j'utilise StringBufferInputStream(fichier); qui est deprecated !
    (Et que la doc me dit d'utiliser StringReader mais je ne vois pas comment.)

Cordialement,
Cyriaque,


Guillaume Desnoix wrote:
[EMAIL PROTECTED]">
    String fichier = props.getProperty("FICHIER","");
    InputStream is = new StringBufferInputStream(fichier);
    ZipInputStream zip = new ZipInputStream(is);
    ...
    Comment puis-je me passer du StringBufferInputStream ?


Il y a la une grosse confusion entre les caracteres (char, String, Reader) et les octets (byte, InputStream). En particulier rien ne garantit que la chaine fichier contienne un zip valide (car il a pu y avoir transformation pendant l'encodage de la String).


Mais cette discussion releve d'un mauvais enonce du probleme. Que contient la variable fichier ? Le nom du fichier ou son contenu ?

Son contenu...

Alors ma remarque s'applique. Il n'est pas possible de stocker dans une String un contenu binaire. J'avais lance la discussion sur cette liste il y a qqs mois, mais je pense que new String(byte[]).getBytes() est ne renvoie pas un resultat identique, du a l'encodage.

Quel est l'encodage utilise ?

Sinon une mauvaise solution est:
new ZipInputStream(new ByteArrayInputStream(fichier.getBytes());

Mais le mieux est d'encoder le contenu du fichier avant de le mettre dans les proprietes. Ou encore mieux, d'utiliser un byte[] plutot qu'une chaine.

Guillaume.



--
Cyriaque Dupoirieux
PCO Technologies
Burolines - 2 ter rue Marcel Doret
31700 Blagnac
Tél : 05.34.60.44.13 - Fax : 05.34.60.44.10

Répondre à