Я получаю исключение java.lang.ArrayIndexOutOfBoundsException при использовании ByteArrayInputStream.
Во-первых, я использую ZipInputStream для чтения через zip-файл, и пока я зацикливаю zipEntries, я использую ByteArrayInputStream для захвата данных каждого zipEntry с использованием ZipInputStream.read (byte [] b) и ByteArrayInputStream(byte [] b) методов.
В итоге у меня есть всего 6 различных объектов ByteArrayInputStream, содержащих данные из 6 различных zipEntries.Затем я использую OpenCSV для чтения каждого из ByteArrayInputStream.
У меня нет проблем с чтением 4 из 6 объектов ByteArrayInputStream, у которых размеры байтов меньше 2000.
Другие 2 объекта ByteArrayInputStream имеют размеры байтов 2155 и 4010 соответственно и CSVreaderбыл в состоянии прочитать только часть этих 2 объектов, а затем дать java.lang.ArrayIndexOutOfBoundsException.
Это код, который я использовал для циклического прохождения 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();
}
Ниже приведенкод, с помощью которого я копирую данные из ZipInputStream в 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;
}
2 набора кодов openCSV способны прочитать несколько строк данных, прежде чем выдать это исключение, что приводит меня кПолагайте, что проблема связана с byteArray.Могу ли я что-нибудь сделать или обойти эту проблему?Я пытаюсь создать приложение, которое принимает zip-файл, но не хранит временные файлы в веб-приложении, так как я развертываю их как на google app engine, так и на сервере tomcat.
Исправлено !!!Благодаря Стивену С я понял, что read (byte []) не читает все, поэтому я изменил код, чтобы сделать copyInputStream полностью функциональным.