2016-08-09 224 views
0

Ich habe versucht, ein ZipEntry-Objekt in ein Byte-Array zu serialisieren, und ich habe verstanden, dass es nicht möglich ist.ZipEntry zu Byte-Array

Hier ist, was ich tue:

ZipEntry entryToDocumentum = null; 
for (ZipEntry oneEntry : entries) { //entries is a ZipEntry arraylist 
    if (oneEntry.getName().equals(details.getId()+"_"+details.getCodEntidade()+"_"+details.getNrDocumento()+".pdf")) { 
     entryToDocumentum = oneEntry; 

    } 
} 
byte[] entryBytes = serializeEntry(entryToDocumentum); 

serializeEntry Methode:

private static byte[] serializeEntry(Object obj) throws IOException { 
    ByteArrayOutputStream b = new ByteArrayOutputStream(); 
    ObjectOutputStream o = new ObjectOutputStream(b); 
    o.writeObject(obj); //here is where I get the NotSerializable exception 
    return b.toByteArray(); 
} 

Wenn ein ZipEntry nicht serialisierbar ist, wie kann ich eine ZipEntry in ein Byte-Array-Format konvertieren?

Antwort

1

ZipEntry implementiert nicht Serializable. Aber das ist in Ordnung, denn niemand hat tatsächlich einen Grund gehabt, eine Instanz von ZipEntry zu serialisieren.

Sie wollen fast sicher die Bytes des Elements, auf die sich die ZipEntry bezieht. Die Klasse ZipEntry enthält Metadaten zu einer Datei, die sich in der ZipFile befindet. Um den Inhalt dieser Datei zu erhalten, verwendet

InputStream ZipFile.getInputStream(ZipEntry) 

Sie können den zurückgegebenen Eingangsstrom wickeln die Daten in welchen auch immer die normalen Art und Weise abzurufen, die sinnvoll für Ihre Anwendung macht und die Daten von dort lesen. Siehe zum Beispiel this question zum Konvertieren in ein Byte-Array.

0

Ich weiß, es ist eine Weile her, aber diese Lösung kann an jemand anderen nützlich sein:

public byte[] ZipEntryToByteArray(ZipInputStream zis, ZipEntry zipEntry) throws IOException{ 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    byte[] buffer = new byte[1024]; 
    int len; 
    while ((len = zis.read(buffer)) > 0) { 
     out.write(buffer, 0, len); 
    } 

    return out.toByteArray(); 
} 
+0

, was es zu tun versuchen? zipEntry nie in der Methode verwenden. –