मैं यह पता लगाने की कोशिश कर रहा हूं कि कोड का यह विशेष स्निपेट मेरे लिए क्यों काम नहीं कर रहा है। मुझे एक एपलेट मिला है जिसे एक पीडीएफ पढ़ना है और इसे पीडीएफ-रेंडरर लाइब्रेरी के साथ प्रदर्शित करना है, लेकिन किसी कारण से जब मैं अपने सर्वर पर बैठे .pdf फ़ाइलों में पढ़ता हूं, तो वे भ्रष्ट होने के रूप में समाप्त होते हैं। मैंने फ़ाइलों को फिर से लिखकर इसका परीक्षण किया है।जावा: यूआरएल से एक पीडीएफ फ़ाइल को एक एप्लेट में बाइट सरणी/बाइटबफर में पढ़ना
मैंने आईई और फ़ायरफ़ॉक्स दोनों में एप्लेट देखने की कोशिश की है और भ्रष्ट फाइलें होती हैं। मजेदार बात यह है कि, जब मैं सफारी (विंडोज़ के लिए) में एप्लेट देखने की कोशिश कर रहा हूं, तो फाइल वास्तव में ठीक है! मैं समझता हूं कि जेवीएम अलग हो सकता है, लेकिन मैं अभी भी खो गया हूं। मैंने जावा 1.5 में संकलित किया है। जेवीएम 1.6 हैं। स्निपेट जो फ़ाइल को पढ़ता है नीचे है।
public static ByteBuffer getAsByteArray(URL url) throws IOException {
ByteArrayOutputStream tmpOut = new ByteArrayOutputStream();
URLConnection connection = url.openConnection();
int contentLength = connection.getContentLength();
InputStream in = url.openStream();
byte[] buf = new byte[512];
int len;
while (true) {
len = in.read(buf);
if (len == -1) {
break;
}
tmpOut.write(buf, 0, len);
}
tmpOut.close();
ByteBuffer bb = ByteBuffer.wrap(tmpOut.toByteArray(), 0,
tmpOut.size());
//Lines below used to test if file is corrupt
//FileOutputStream fos = new FileOutputStream("C:\\abc.pdf");
//fos.write(tmpOut.toByteArray());
return bb;
}
मुझे कुछ याद आना चाहिए, और मैं इसे समझने की कोशिश कर रहा हूं। कोई भी मदद बहुत ही सराहनीय होगी। धन्यवाद।
संपादित करें: आगे मेरी स्थिति, फ़ाइल इससे पहले कि मैं स्निपेट के साथ और बाद तो पढ़ में अंतर को स्पष्ट करने के लिए, कि लोगों को पढ़ने के बाद मैं उत्पादन काफी छोटे की तुलना में वे मूल रूप से कर रहे हैं कर रहे हैं। उन्हें खोलते समय, उन्हें .pdf फ़ाइलों के रूप में पहचाना नहीं जाता है। फेंकने वाले कोई अपवाद नहीं हैं जिन्हें मैं अनदेखा करता हूं, और मैंने कोई फायदा नहीं उठाया है।
यह स्निपेट सफारी में काम करता है, जिसका अर्थ है कि फाइलें पूरी तरह से पढ़ी जाती हैं, आकार में कोई फर्क नहीं पड़ता है, और किसी भी .pdf पाठक के साथ खोला जा सकता है। आईई और फ़ायरफ़ॉक्स में, फ़ाइलें हमेशा दूषित होने लगती हैं, लगातार एक ही छोटे आकार में।
मैंने प्रत्येक लूप पर कितने बाइट्स को पढ़ने के लिए यह देखने की उम्मीद करते हुए लेन परिवर्तनीय (59kb फ़ाइल पढ़ते समय) की निगरानी की। आईई और फ़ायरफ़ॉक्स में, 18kb पर, in.read (buf) एक -1 देता है जैसे फ़ाइल समाप्त हो गई है। सफारी ऐसा नहीं करता है।
मैं इसे रखूंगा, और अब तक मैं सभी सुझावों की सराहना करता हूं।
जब आप कहते हैं कि फ़ाइल दूषित है, आप वास्तव में क्या मतलब है? यदि आप मूल की तुलना करते हैं, तो अलग क्या है? – Eddie
एडी के प्रश्न के 2 भाग के उत्तर दें। साथ ही, सामग्री लम्बाई का मूल्य सही है? – jdigital