Jersey 客户端下载 ZIP 文件并高效解压
Jersey Client download ZIP file and unpack efficiently
所以,我有一个 returns ZIP 文件的服务器应用程序,我正在处理大文件 (>=5GB)。然后我使用球衣客户端从这个应用程序发出 GET 请求,之后我想基本上提取 ZIP 并将其保存为文件夹。这是客户端配置:
Client client = ClientBuilder.newClient();
client.register(JacksonJaxbJsonProvider.class);
client.register(MultiPartFeature.class);
return client;
这是从服务器获取响应的代码:
client.target(subMediumResponseLocation).path("download?delete=true").request()
.get().readEntity(InputStream.class)
然后我的代码经历了一堆(对这个问题不重要的)步骤,最后开始写入数据。
try (ZipInputStream zis = new ZipInputStream(inputStream)) {
ZipEntry ze = zis.getNextEntry();
while(ze != null){
String fileName = ze.getName();
if(fileName.contains(".")) {
size += saveDataInDirectory(folder,zis,fileName);
}
is.closeEntry();
ze = zis.getNextEntry();
}
zis.closeEntry();
} finally {
inputStream.close();
}
现在我遇到的问题是 ZipInputStream 拒绝工作。我可以调试应用程序并看到 InputStream 中有字节,但是当它到达 while(ze != null)
检查时,第一个条目 returns 为空,导致目录为空。
我也试过使用将客户端的 InputStream 写入 ByteArrayOutputStream
transferTo
方法,但我得到一个 java 堆 space 错误,指出数组长度太大(即使我的堆 space 设置是 Xmx=16gb 和 Xms=12gb ).
我的想法是,也许由于 InputStream 是由 Jersey
直接使用 UrlConnector
延迟加载的,因此这与 ZipInputStream
反应不佳。另一个可能的问题是我没有为 ZipInputStream
.
使用 ByteArrayInputStream
什么是合适的解决方案(记住堆问题)?
好的,所以我解决了它,显然我的请求是在路径中添加查询参数时收到 404....path("download?delete=true")
所以,我有一个 returns ZIP 文件的服务器应用程序,我正在处理大文件 (>=5GB)。然后我使用球衣客户端从这个应用程序发出 GET 请求,之后我想基本上提取 ZIP 并将其保存为文件夹。这是客户端配置:
Client client = ClientBuilder.newClient();
client.register(JacksonJaxbJsonProvider.class);
client.register(MultiPartFeature.class);
return client;
这是从服务器获取响应的代码:
client.target(subMediumResponseLocation).path("download?delete=true").request()
.get().readEntity(InputStream.class)
然后我的代码经历了一堆(对这个问题不重要的)步骤,最后开始写入数据。
try (ZipInputStream zis = new ZipInputStream(inputStream)) {
ZipEntry ze = zis.getNextEntry();
while(ze != null){
String fileName = ze.getName();
if(fileName.contains(".")) {
size += saveDataInDirectory(folder,zis,fileName);
}
is.closeEntry();
ze = zis.getNextEntry();
}
zis.closeEntry();
} finally {
inputStream.close();
}
现在我遇到的问题是 ZipInputStream 拒绝工作。我可以调试应用程序并看到 InputStream 中有字节,但是当它到达 while(ze != null)
检查时,第一个条目 returns 为空,导致目录为空。
我也试过使用将客户端的 InputStream 写入 ByteArrayOutputStream
transferTo
方法,但我得到一个 java 堆 space 错误,指出数组长度太大(即使我的堆 space 设置是 Xmx=16gb 和 Xms=12gb ).
我的想法是,也许由于 InputStream 是由 Jersey
直接使用 UrlConnector
延迟加载的,因此这与 ZipInputStream
反应不佳。另一个可能的问题是我没有为 ZipInputStream
.
ByteArrayInputStream
什么是合适的解决方案(记住堆问题)?
好的,所以我解决了它,显然我的请求是在路径中添加查询参数时收到 404....path("download?delete=true")