I NanoHTTPD als Web-Server in meinem Android APP verwenden, ich hoffe, einige Dateien zu komprimieren und einen Inputstream in Server-Seite zu erstellen, und ich lade Sie die Inputstream in Client-Seite-Code A.Wie erstellt man einen ZIP InputStream in Android, ohne zuerst eine ZIP-Datei zu erstellen?
mitI Code B bei How to zip and unzip the files? gelesen , aber wie erstellt man einen ZIP InputStream in Android, ohne zuerst eine ZIP-Datei zu erstellen?
BTW, ich glaube nicht, Code C ist gut Weg, weil es ZIP-Datei zuerst machen, dann konvertieren ZIP-Datei zu FileInputStream, ich hoffe, einen ZIP-EingangStream direkt zu erstellen!
Code 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;
}
Code 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();
}
}
-Code C
File file= new File("my.zip");
FileInputStream fis = null;
try
{
fis = new FileInputStream(file);
} catch (FileNotFoundException ex)
{
}
Sie müssen einen * Ausgang * -Stream auf dem Server erstellen. Ein 'ZipOutputStream', um den Ausgabestrom gewickelt, den die Servertechnologie Ihnen gibt. – EJP
Danke! Könnten Sie mir einen Beispielcode für EJP geben? – HelloCW
Sie können ZipInputSteam nicht direkt erstellen, da ZipInputSteam FilterInputStream erweitert, sodass es im Grunde genommen als Wrapper-Klasse fungiert, die Funktionen für den Stream zum Lesen von ZIP-Dateien bereitstellt. Du brauchst etwas wie 'new ZipInputStream (neuer FileInputStream (zipFile))' –