2016-08-09 33 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のインスタンスをシリアル化する理由がなかったので、これは問題ありません。

ほとんどの場合、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はこのメソッドでは使用しません。 –