Aidez-moi! java.lang.ArrayIndexOutOfBoundsException inattendu lors de l'utilisation ByteArrayInputStream

StackOverflow https://stackoverflow.com/questions/3953379

  •  08-10-2019
  •  | 
  •  

Question

Je reçois un java.lang.ArrayIndexOutOfBoundsException lors de l'utilisation ByteArrayInputStream.

D'abord, j'utiliser un ZipInputStream pour lire un fichier zip, et tout en boucle à travers les zipEntries, J'utilise un ByteArrayInputStream pour capturer les données de chaque ZipEntry en utilisant le méthodes ZipInputStream.read (byte [] b) et ByteArrayInputStream (byte [] b).

A la fin, je possède un total de 6 différents objets ByteArrayInputStream contenant des données à partir de 6 différents zipEntries. J'utilise ensuite OpenCSV à lire à travers chacun des ByteArrayInputStream.

Je n'ai pas de problème de lecture 4 des 6 objets ByteArrayInputStream, dont ont des tailles d'octets inférieur à 2000.

Les 2 autres objets ByteArrayInputStream ont des tailles d'octets de 2155 et 4010, respectivement, et le CSVReader ne put lire une partie de ces 2 objets, puis donner une java.lang.ArrayIndexOutOfBoundsException.

Ceci est le code I utilisé pour la boucle à travers la ZipInputStream

    InputStream fileStream = attachment.getInputStream();

    try {

        ZipInputStream zippy = new ZipInputStream(fileStream);
        ZipEntry entry = zippy.getNextEntry();

        ByteArrayInputStream courseData = null;

        while (entry!= null) {

            String name = entry.getName();
            long size = entry.getSize();

            if (name.equals("course.csv")) {
                courseData = copyInputStream(zippy, (int)size);
            }
            //similar IF statements for 5 other ByteArrayInputStream objects 
            entry = zippy.getNextEntry(); 
        }

        CourseDataManager.load(courseData);
    }catch(Exception e){
       e.printStackTrace();
    }

Ce qui suit est le code dont j'utilise pour copier les données de la ZipInputStream au ByteArrayInputStream.

public ByteArrayInputStream copyInputStream(InputStream in, int size)
        throws IOException {
    byte[] buffer = new byte[size];

    in.read(buffer);
    ByteArrayInputStream b = new ByteArrayInputStream(buffer);
    return b;

}

Les 2 séries de codes openCSV sont capables de lire quelques lignes de données, avant de lancer cette exception, ce qui me porte à croire qu'il est le byteArray qui est l'origine du problème. Est-ce que je peux faire ou le travail autour de ce problème? Je suis en train de faire une application qui accepte un fichier zip, sans stocker les fichiers temporaires dans l'application Web, comme je déploie à la fois moteur app Google et tomcat serveur.

Fixe !!! Merci à stephen C, j'ai réalisé que lecture (octet []) ne lit pas tout, donc j'ajusté le code pour rendre le copyInputStream pleinement fonctionnel.

Était-ce utile?

La solution

Depuis ressemble devoirs, voici un indice:

  

La méthode de read(byte[]) retourne le nombre d'octets lus.

Autres conseils

Sur quelle ligne vous obtenez l'erreur? Et avez-vous vérifié la valeur de size? Je pense qu'il est 0

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top