這是不是java.util.zip的bug,望不吝賜教?看看有多少人結果和我一樣

rougher發表於2004-07-24
開啟一個Zip檔案,Zip裡面是若干個文字檔案,每個文字檔案由一行一行15位數字組成。
我用迴圈讀取文字檔案裡面內容,但是隻能讀取一定行數(位元組),有的時候是246行,有的時候是230行,反正都在250行之內,位元組數一般在4000以內。
然後就無法讀取了,如果直接讀取10000個位元組(文字檔案位元組數肯定超過10000),只返回前3973個位元組。
這是什麼問題,還望高人指點。
程式碼如下
作為Java Application還是在B/S等架構程式中呼叫結果都一樣
程式碼如下:

/*
* Created on 2004-7-23
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
import java.io.FileInputStream;
import java.io.IOException;
import java.util.zip.*;

/**
* @author Rougher
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class TestZip {

private static ZipInputStream in = null;
private static String filename = "c:/test.zip";
public static void main(String[] arg){
	try{
	TestZip.CheckFileLines();
	}catch(Exception e){ e.printStackTrace();}
	}


public static void OpenZipFile() throws IOException
{
	in = new ZipInputStream(new FileInputStream(filename));
	in.getNextEntry();
}

public static String readstr(int count)throws IOException{
if (in == null)
{
	OpenZipFile();
}
byte[] buf = new byte[count];
int len = 0;
try
{
	 len = in.read(buf, 0, count);
}
catch(IOException e)
{
	throw e;
}
if(len > 0)
{
return new String(buf).substring(0,len);
}else{
return "";
}
}

public static void CheckFileLines() throws IOException
{
int num = 0;
String str = "";
while((str=readstr(17)).length()== 17)
{
num++;
System.out.print(str);
}
in.close();
}
}
<p class="indent">

Test.Zip裡面是一個(或n個)由幾千行(只要大於300行就行)15位數字組成的文字檔案。
只能讀取2XX行。改變ZIP內的檔案,一般讀取的行數也會發生變化。

相關文章