我試圖從一個ZIP壓縮文件中讀取一個XML文件。相關代碼如下:Java ZipInputStream不能讀取整個ZipEntry
ZipInputStream zis = new ZipInputStream(is);
ZipEntry entry = zis.getNextEntry();
while(entry != null) {
if(entry.getName().equals("plugin.xml")) {
int size = (int)entry.getSize();
byte[] bytes = new byte[size];
int read = zis.read(bytes, 0, size);
System.out.println("File size: " + size);
System.out.println("Bytes read: " + read);
}
}
此,工作時產生的輸出如下:
File size: 5224
Bytes read: 5224
的plugin.xml
文件中讀取什麼特別的,並通過任何XML驗證不過,我可以找到,未成年人更改XML文件(刪除字符,添加字符等)有時會導致輸入流中「讀取的字節數」小於文件大小的情況。在這種情況下,我改變了與上述相同的文件的XML屬性的文本價值,並得到以下結果:
File size: 5218
Bytes read: 5205 // the reader stopped early!
我看不到方面的任何模式,其中XML文件將工作,這將不。這似乎是完全隨機的。
有沒有人遇到過這樣的事情?
編輯:忘了提及,讀取plugin.xml
文件的Java代碼被嵌入到現成的應用程序中,我無法更改。我的問題是試圖瞭解爲什麼它在某些情況下不會接受我的XML文件。
不幸的是,從ZIP讀取XML文件的代碼是我無法更改的供應商應用程序的一部分。我試圖理解爲什麼我的XML文件有時會被完全讀取,有時甚至沒有。似乎沒有一種模式。 – WayneC
@WayneC然後向供應商投訴。如果這是他們的代碼,那就錯了。例如,它絕不會在套接字上運行。 '模式'是Java API中沒有任何東西需要它的工作,所以如果它能夠工作,那就是奇蹟。 – EJP
原來他們有一個針對這個確切問題的補丁。我遺漏的是如果文件的壓縮大小小於緩衝區大小,它將工作。 – WayneC