it-swarm.com.de

In Java: Wie kann ich die Datei vom Byte [] - Array abspulen?

Meine Anwendung empfängt E-Mails über den SMTP-Server. Es gibt einen oder mehrere Anhänge in der E-Mail und E-Mail-Anhänge als Byte [] (unter Verwendung von Sun Javamail API).

Ich versuche, die Attachment-Dateien schnell zu komprimieren, ohne sie zuerst auf die Festplatte zu schreiben.

Was ist/ist möglich, dieses Ziel zu erreichen?

39
netic

Mit Java.util.Zip.ZipOutputStream können Sie eine ZIP-Datei im Arbeitsspeicher erstellen. Zum Beispiel:

public static byte[] zipBytes(String filename, byte[] input) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ZipOutputStream zos = new ZipOutputStream(baos);
    ZipEntry entry = new ZipEntry(filename);
    entry.setSize(input.length);
    zos.putNextEntry(entry);
    zos.write(input);
    zos.closeEntry();
    zos.close();
    return baos.toByteArray();
}
101
Dave L.

Vielleicht hilft Ihnen das Paket Java.util.Zip

Da Sie nach dem Konvertieren von Byte-Arrays fragen, denke ich (nicht getestet), können Sie die ByteArrayInputStream-Methode verwenden

int     read(byte[] b, int off, int len)
          Reads up to len bytes of data into an array of bytes from this input stream.

dass du füttern wirst 

ZipInputStream  This class implements an input stream filter for reading files in the Zip file format.
1
Eric

Ich habe das gleiche Problem, aber ich brauchte viele Dateien in einem Zip.

protected byte[] listBytesToZip(Map<String, byte[]> mapReporte, String extension) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ZipOutputStream zos = new ZipOutputStream(baos);
    for (Entry<String, byte[]> reporte : mapReporte.entrySet()) {
        ZipEntry entry = new ZipEntry(reporte.getKey() + extension);
        entry.setSize(reporte.getValue().length);
        zos.putNextEntry(entry);
        zos.write(reporte.getValue());
    }
    zos.closeEntry();
    zos.close();
    return baos.toByteArray();
}
1
Jesús Sánchez

Sie können eine Zip-Datei aus einem Byte-Array erstellen und zum UI streamedContent zurückkehren 

public StreamedContent getXMLFile() {
        try {
            byte[] blobFromDB= null;
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ZipOutputStream zos = new ZipOutputStream(baos);
            String fileName= "fileName";
            ZipEntry entry = new ZipEntry(fileName+".xml");
            entry.setSize(byteArray.length);
            zos.putNextEntry(entry);
            zos.write(byteArray);
            zos.closeEntry();
            zos.close();
            InputStream is = new ByteArrayInputStream(baos.toByteArray());
            StreamedContent zipedFile= new DefaultStreamedContent(is,   "application/Zip", fileName+".Zip", Charsets.UTF_8.name());
            return fileDownload;
        } catch (IOException e) {
            LOG.error("IOException e:{} ",e.getMessage());
        } catch (Exception ex) {
            LOG.error("Exception ex:{} ",ex.getMessage());
        }
}
0
Maciej

Sie müssen dafür einen ZipOutputStream verwenden. 

http://Java.Sun.com/javase/6/docs/api/Java/util/Zip/ZipOutputStream.html

0
OscarRyz