2012-06-19 9 views
5

के आकार हो रही है वहाँ लगता है/इससे पहले कि हम पूरी तरह से स्ट्रीम पढ़ें ZipInputStream के आकार का अनुमान वैसे भी है?ZipInputStream

उदाहरण के लिए, हम getNextEntry साथ प्रवेश के मेटाडाटा मिल इससे पहले कि हम userdata पढ़ सकते हैं कर सकते हैं।

इनपुटस्ट्रीम में एक बाइट्स की संख्या का अनुमान लगाने के लिए एक विधि उपलब्ध है() इस इनपुट स्ट्रीम से पढ़ा जा सकता है लेकिन मुझे ज़िप इनपुटपुट के लिए एक समान विधि नहीं मिल पा रही है।

+0

क्या आपके पास ज़िपफ़ाइल तक पहुंच है जहां स्ट्रीम से आया था? – Thilo

+0

नहीं। हमारे पास अभी एक स्ट्रीम आ रही है। मैं जानना चाहता था कि पूर्ण स्ट्रीम पढ़ने से पहले मेटाडेटा प्राप्त करने के लिए कोई रास्ता था या नहीं। –

उत्तर

1

ZipInputStream विधि उपलब्ध() है, लेकिन यह 0 या 1.

फ़ाइल के किसी भी प्रकार के अनुमानित आकार मिलता है, आप FileInputStream उपयोग कर सकते हैं और फिर ज़िप फ़ाइल उपयोग ZipInputStream पढ़ने के लिए करने के लिए देता है। पूर्व।

public class ZipUtil { 

    public static void main(String[] args) throws Exception { 
     ZipInputStream zis = null; 

     FileInputStream fis = new FileInputStream("C:/catalina.zip"); 
     int size = fis.available(); 
     System.out.println("size in KB : " + size/1024); 
     zis = new ZipInputStream(fis);   

     ZipEntry ze; 
     while ((ze = zis.getNextEntry()) != null) { 
      System.out.println(ze.getName()); 
     } 
    } 
} 
+0

इस दृष्टिकोण के साथ समस्या यह है कि मैं न एक ज़िप फ़ाइल है कि मैं एक FileInputStream में कर सकते हैं है। मेरे पास काम करने के लिए केवल एक ज़िप इनपुट स्ट्रीम है। –

+0

कृपया अपनी आवश्यकता को बेहतर ढंग से समझने के लिए अपना कोड साझा करें –

+1

जावडोक में कुल आकार मान के रूप में उपलब्ध() का उपयोग करने के खिलाफ एक विशिष्ट चेतावनी है। – EJP

2

यदि आपके पास सिर्फ स्ट्रीम है, तो मुझे ऐसा नहीं लगता है।

zip file format प्रविष्टियों में से सिर्फ एक दृश्य है, और फिर एक वैश्विक निर्देशिका अंत पर (जो सभी फाइलों और उनके आकार की एक टेबल है) है। तो फ़ाइल तक पहुंच के बिना, आप उस जानकारी तक नहीं पहुंच पाएंगे।

1

InputStream एक विधि उपलब्ध() है कि इस इनपुट धारा

से को रोके बिना पढ़ा जा सकता है बाइट्स की संख्या का अनुमान वापस जाने के लिए है। वही बात नहीं है। वहाँ जावाडोक के बारे में नहीं कुल फ़ाइल आकार के रूप में इस मूल्य के उपचार में एक विशिष्ट चेतावनी है।

लेकिन मुझे ज़िप इनपुटपुट के लिए एक समान विधि नहीं मिल पा रहा है।

कि अजीब बात है, क्योंकि यह नहीं है। हालांकि यह शून्य लौटाता है, जो कि सबसे अच्छा अनुमान है कि यह को अवरुद्ध किए बिना कितना पढ़ा जा सकता है।

क्यों? क्योंकि (ए) यह एक धारा है, और (ii) यह एक ज़िपित धारा है। यह जानने का कोई तरीका नहीं है कि इसे पढ़ने के बिना कितना है; और यह जानने का कोई तरीका नहीं है कि इसे कितना अवरुद्ध किए बिना पढ़ा जा सकता है,