Hilfe! unerwartete java.lang.ArrayIndexOutOfBoundsException wenn ByteArrayInputStream mit

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

  •  08-10-2019
  •  | 
  •  

Frage

Ich erhalte eine java.lang.ArrayIndexOutOfBoundsException wenn ByteArrayInputStream verwenden.

Zuerst verwende ich eine ZipInputStream durch eine Zip-Datei zu lesen, und während sie durch die zipEntries Looping, Ich benutze einen ByteArrayInputStream die Daten jedes ZipEntry zu erfassen Verwendung der ZipInputStream.read (byte [] b) und ByteArrayInputStream (byte [] b) Methoden.

Am Ende habe ich insgesamt 6 verschiedene ByteArrayInputStream Objekte Daten aus 6 verschiedenen zipEntries enthalten. Ich benutze OpenCSV dann jeden der ByteArrayInputStream durch zu lesen.

Ich habe kein Problem Lesen 4 der 6 ByteArrayInputStream Objekte, von denen Byte Größen von weniger als 2000 haben.

Die anderen 2 ByteArrayInputStream Objekte haben Bytegrößen von 2155 und 4010 jeweils und die CSVReader konnte nur ein Teil dieser 2 Objekte lesen, dann eine java.lang.ArrayIndexOutOfBoundsException geben.

Dies ist der Code, den ich in einer Schleife durch die verwendeten 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();
    }

Im Folgenden ist der Code, mit dem ich die Daten aus dem ZipInputStream zum ByteArrayInputStream kopieren.

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

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

}

Die 2 Sätze openCSV Codes sind in der Lage, ein paar Zeilen von Daten zu lesen, bevor diese Ausnahme zu werfen, die mich führt zu glauben, dass es die byteArray ist, die das Problem verursacht. Gibt es etwas, ich, um dieses Problem tun oder arbeiten kann? Ich versuche, eine Anwendung zu machen, die eine Zip-Datei akzeptiert, wenn auch nicht alle temporären Dateien in dem Web-App zu speichern, da ich sowohl Google App Engine am Einsatz und Tomcatbediener.

Fixed !!! Dank stephen C, erkannte ich, dass read (byte []) liest nicht alles so ich den Code angepasst die copyInputStream voll funktionsfähig zu machen.

War es hilfreich?

Lösung

Da das sieht aus wie Hausaufgaben, hier ein Tipp:

Die read(byte[]) Methode gibt die Anzahl Bytes gelesen.

Andere Tipps

Auf welche Linie erhalten Sie den Fehler? Und haben Sie überprüft den Wert von size? Ich vermute, es ist 0

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top