Мой способ достичь этого - создать класс обертки ZipInputStream, который будет обрабатывать, который будет обеспечивать только поток текущей записи:
Класс оболочки:
public class ZippedFileInputStream extends InputStream {
private ZipInputStream is;
public ZippedFileInputStream(ZipInputStream is){
this.is = is;
}
@Override
public int read() throws IOException {
return is.read();
}
@Override
public void close() throws IOException {
is.closeEntry();
}
}
Использование этого:
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream("SomeFile.zip"));
while((entry = zipInputStream.getNextEntry())!= null) {
ZippedFileInputStream archivedFileInputStream = new ZippedFileInputStream(zipInputStream);
//... perform whatever logic you want here with ZippedFileInputStream
// note that this will only close the current entry stream and not the ZipInputStream
archivedFileInputStream.close();
}
zipInputStream.close();
Одно из преимуществ такого подхода: InputStreams передаются в качестве аргументов методам, которые обрабатывают их, и эти методы имеют тенденцию немедленно закрывать входной поток после того, как они будут выполнены с ним.
Вы можете использовать значения массивов в диапазонах запросов, предоставляя идентификаторы полей, используя функцию fieldID2Ext.
Вы можете построить представление и применить к нему настройки.