Je reçois une exception java.lang.ArrayIndexOutOfBoundsException lors de l'utilisation de ByteArrayInputStream.Aide! java.lang.ArrayIndexOutOfBoundsException inattendue lors de l'utilisation de ByteArrayInputStream
Premièrement, j'utilise un ZipInputStream pour lire un fichier compressé, et tout en boucle à travers les zipEntries, J'utilise un ByteArrayInputStream pour capturer les données de chaque ZipEntry utilisant le ZipInputStream.read (byte [] b) et ByteArrayInputStream (byte [] b) méthodes. À la fin, j'ai un total de 6 objets ByteArrayInputStream différents contenant des données de 6 entrées zip différentes. J'utilise ensuite OpenCSV pour lire chacun des ByteArrayInputStream.
Je n'ai aucun problème de lecture 4 des 6 objets ByteArrayInputStream, dont ont des tailles d'octets de moins de 2000.
Les 2 autres objets ByteArrayInputStream ont des tailles d'octets de 2155 et 4010 respectivement, et la CSVReader n'a pu lisez une partie de ces 2 objets, puis donnez une exception 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. Y a-t-il quelque chose que je puisse faire ou contourner ce problème? J'essaie de faire une application qui accepte un fichier zip, sans stocker de fichiers temporaires dans l'application web, car je suis en train de déployer à la fois google app engine et tomcat server.
Fixé !!! Merci à stephen C, j'ai réalisé que read (byte []) ne lit pas tout alors j'ai ajusté le code pour rendre le copyInputStream pleinement fonctionnel.
Cela ressemble à des devoirs pour moi. –