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 |
