使用ByteArrayInputStream时,我得到了java.lang.ArrayIndexOutOfBoundsException。
首先,我使用ZipInputStream来读取zip文件, 在循环zipEntries时, 我使用ByteArrayInputStream来捕获每个zipEntry的数据 使用 ZipInputStream.read(byte [] b)和ByteArrayInputStream(byte [] b)方法。
最后,我总共有6个不同的ByteArrayInputStream对象,其中包含来自6个不同zipEntries的数据。 然后我使用OpenCSV来读取每个ByteArrayInputStream。
我在读取6个字节大小小于2000的ByteArrayInputStream对象中没有问题。
其他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文件的应用程序,而不是在Web应用程序中存储任何临时文件,因为我正在部署到谷歌应用程序引擎和tomcat服务器。
固定!!!感谢stephen C,我意识到read(byte [])没有读取所有内容所以我调整了代码以使copyInputStream完全正常运行。
答案 0 :(得分:1)
由于这看起来像家庭作业,这里有一个提示:
read(byte[])
方法返回读取的字节数。
答案 1 :(得分:0)
你在哪一行得到错误?你检查了size
的价值吗?我怀疑它是0