Bir zip dosyasında bulunan birden çok gzpli json dosyasını bir InputStream aracılığıyla ayrıştırmaya çalışıyorum http bağlantısı.Herhangi bir dosyayı diske kaydetmeden bir zip giriş akışında bulunan birden fazla gzipped json dosyasını ayrıştırma (google uygulama altyapısı nedeniyle)
İlk dosyayı okumayı başardım ama daha fazlasını değil. Bazen başarısız olur ve tüm (ilk) dosyayı okumaz. Bağlantıda içerik uzunluğu üstbilgisini kontrol ettim ve tüm dosyayı okumadığımda bile aynı.
Bulduğum örneklerin çoğunun yerel olarak dosya kaydetmesine izin vermeyen goole app engine kullanıyorum.
Zip dosyası için https://commons.apache.org/proper/commons-compress/'dan ZipArchiveInputStream kullanıyorum. Bu benim bulmak mümkün oldum en yakından ilişkili soru
: How to read from file containing multiple GzipStreams
private static ArrayList<RawEvent> parseAmplitudeEventArchiveData(HttpURLConnection connection)
throws IOException, ParseException {
String name, line;
ArrayList<RawEvent> events = new ArrayList<>();
try (ZipArchiveInputStream zipInput =
new ZipArchiveInputStream(connection.getInputStream(), null, false, true);) {
ZipArchiveEntry zipEntry = zipInput.getNextZipEntry();
if (zipEntry != null) {
try(GZIPInputStream gzipInputStream = new GZIPInputStream(connection.getInputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(gzipInputStream))) {
name = zipEntry.getName();
log.info("Parsing file: " + name);
while ((line = reader.readLine()) != null) {
events.add(parseJsonLine(line));
}
log.info("Events size: " + events.size());
}
}
}
return events;
}
Sana giriş akışı kullandığından bu nasıl çalıştığını merak GZIPInputStream bağlantısından. Ama gerçekten istediğiniz şey ZipArchiveInputStream için verileri okumak ve bu verilerden bir GZIPInputStream oluşturmaktır. –
@ MartinKrüger evet Aynı şeyi merak ettim ... eğer bir "IOException: Kesilmiş ZIP dosyası" aldığım önerisini değiştirirsem – Jitan