我在Android應用程序使用NanoHTTPD作爲Web服務器,希望壓縮某些文件並創建在服務器端的InputStream,我使用代碼A.如何在不創建ZIP文件的情況下在Android中創建ZIP InputStream?
我在How to zip and unzip the files?閱讀代碼B下載客戶端InputStream的,但如何在不創建ZIP文件的情況下在Android中創建ZIP InputStream?我不認爲Code C是好的方法,因爲它首先製作ZIP文件,然後將ZIP文件轉換爲FileInputStream,我希望直接創建一個ZIP InputStream!
代碼A
private Response ActionDownloadSingleFile(InputStream fis) {
Response response = null;
response = newChunkedResponse(Response.Status.OK, "application/octet-stream",fis);
response.addHeader("Content-Disposition", "attachment; filename="+"my.zip");
return response;
}
代碼B
public static void zip(String[] files, String zipFile) throws IOException {
BufferedInputStream origin = null;
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile)));
try {
byte data[] = new byte[BUFFER_SIZE];
for (int i = 0; i < files.length; i++) {
FileInputStream fi = new FileInputStream(files[i]);
origin = new BufferedInputStream(fi, BUFFER_SIZE);
try {
ZipEntry entry = new ZipEntry(files[i].substring(files[i].lastIndexOf("/") + 1));
out.putNextEntry(entry);
int count;
while ((count = origin.read(data, 0, BUFFER_SIZE)) != -1) {
out.write(data, 0, count);
}
}
finally {
origin.close();
}
}
}
finally {
out.close();
}
}
代碼C
File file= new File("my.zip");
FileInputStream fis = null;
try
{
fis = new FileInputStream(file);
} catch (FileNotFoundException ex)
{
}
您需要在服務器中創建一個*輸出*流。一個'ZipOutputStream',圍繞着服務器技術給你的任何輸出流。 – EJP
謝謝!對於EJP,你能給我一些示例代碼嗎? – HelloCW
由於ZipInputSteam擴展了FilterInputStream,所以不能直接製作ZipInputSteam,所以它基本上起到了包裝類的作用,它爲流讀取zip文件提供了功能。你需要像'new ZipInputStream(new FileInputStream(zipFile))' –