Java: la Lecture d'un fichier pdf à partir de l'URL dans le tableau d'Octets/ByteBuffer dans une applet

J'essaie de comprendre pourquoi ce bout de code ne fonctionne pas pour moi. J'ai une applet qui est censé lire un .pdf et de l'afficher avec un pdf-rendu de la bibliothèque, mais pour une raison quelconque, quand j'ai lu dans le .pdf fichiers qui se trouvent sur mon serveur, ils finissent par être corrompu. Je l'ai testé par écrit les fichiers de retour à nouveau.

J'ai essayé d'affichage de l'applet dans IE et Firefox et les fichiers corrompus de se produire. La chose drôle est, quand j'essaie affichage de l'applet dans Safari (pour Windows), le fichier est effectivement très bien! Je comprends la JVM peut être différent, mais je suis toujours perdu. J'ai compilé en Java 1.5. Les machines virtuelles sont de 1,6. L'extrait de code qui lit le fichier ci-dessous.

public static ByteBuffer getAsByteArray(URL url) throws IOException {
        ByteArrayOutputStream tmpOut = new ByteArrayOutputStream();

        URLConnection connection = url.openConnection();
        int contentLength = connection.getContentLength();
        InputStream in = url.openStream();
        byte[] buf = new byte[512];
        int len;
        while (true) {
            len = in.read(buf);
            if (len == -1) {
                break;
            }
            tmpOut.write(buf, 0, len);
        }
        tmpOut.close();
        ByteBuffer bb = ByteBuffer.wrap(tmpOut.toByteArray(), 0,
                                        tmpOut.size());
        //Lines below used to test if file is corrupt
        //FileOutputStream fos = new FileOutputStream("C:\\abc.pdf");
        //fos.write(tmpOut.toByteArray());
        return bb;
}

Je dois manquer quelque chose, et j'ai été frapper ma tête à essayer de le comprendre. Toute aide est grandement appréciée. Merci.


Edit:
Pour préciser encore ma situation, la différence dans le fichier avant que j'ai lu ensuite avec de l'extrait de code et après, c'est que ceux que j'ai sortie après la lecture sont beaucoup plus petits que ce qu'ils sont à l'origine. Lors de l'ouverture d'eux, ils ne sont pas reconnus comme .les fichiers pdf. Il n'y a aucune exception levée que j'ignore, et j'ai essayé de rinçage en vain.

Cet extrait fonctionne dans Safari, en signifiant que les fichiers sont lus dans sa globalité, avec aucune différence dans la taille, et peut être ouvert à tout .lecteur de pdf. Dans IE et Firefox, les fichiers finissent toujours par être corrompu, toujours la même taille plus petite.

J'ai surveillé la variable len (lors de la lecture d'un 59kb fichier), l'espoir de voir comment le nombre d'octets à lire dans à chaque tour de boucle. Dans IE et Firefox, à 18kb, la dans.read(buf) retourne -1 comme si le fichier est terminée. Safari ne pas faire cela.

Je vais garder à elle, et j'apprécie toutes les suggestions à ce jour.

Quand vous dites que le fichier est corrompu, que voulez-vous dire exactement? Si vous comparer à l'original, ce qui est différent?
Veuillez répondre à la 2ème partie de Eddie question. Aussi, est la valeur de contentLength correct?

OriginalL'auteur Pol | 2009-03-12