2016-08-09 4 views
0

ZipEntry 객체를 바이트 배열로 직렬화하려고했는데 불가능하다고 생각했습니다. 내가 바이트 배열에 ZipEntry를 변환 할 수있는 방법,ZipEntry to byte array

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(); 
} 

ZipEntry를 직렬화가 아닌 경우 :

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 방법 : 여기

내가 뭘하는지입니까?

답변

1

ZipEntrySerializable을 구현하지 않습니다. 하지만 아무도 실제로 ZipEntry의 인스턴스를 serialize 할 이유가 없으므로 괜찮습니다.

거의 확실하게 ZipEntry이 참조하는 항목의 바이트를 원합니다. ZipEntry 클래스에는 ZipFile에있는 파일에 대한 메타 데이터가 들어 있습니다. 해당 파일의 내용을 얻으려면, 당신은 데이터를 검색하기 위해 반환 된 입력 스트림을 래핑 할 수

InputStream ZipFile.getInputStream(ZipEntry) 

를 사용하는 응용 프로그램에 대한 의미가 거기에서 데이터를 읽을 정상적인 방법 중입니다. 예를 들어 바이트 배열로 변환하는 경우 this question을 참조하십시오.

0

가 나는 동안이었다 알고 있지만,이 솔루션은 다른 사람에게 도움이 될 수 있습니다

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

가해야 할 노력했다? zipEntry 메서드에서 절대 사용하지 마십시오. –