准备每次从输入流读取10k,但实际每次读取长度并不总是10k,甚至可能为0,三次测试结果如下:
第一次运行结果(read 10次):
ContentLength:52450
7872
88
10240
10240
176
3472
3472
10240
3472
3178
文件名称:nvdcve-2.0-modified.xml
文件大小:711356
第二次运行结果(read 11次):
ContentLength:52450
7872
6944
3472
3472
6944
3472
3472
3472
6944
3472
2914
文件名称:nvdcve-2.0-modified.xml
文件大小:711356
第三次运行结果(read 10次):
ContentLength:52450
7872
3472
3472
3472
3472
9660
10240
10240
220
330
文件名称:nvdcve-2.0-modified.xml
文件大小:711356
URL url = new URL("http://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-Modified.xml.zip");
//sun.net.www.protocol.http.HttpURLConnection
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestProperty("User-Agent", "Mozilla/5.0 Chrome/31.0.1650.63 Safari/537.36");
/*1、读取压缩文件流*/
System.out.println("ContentLength:" + con.getContentLength());
InputStream is = con.getInputStream();
int len = -1; byte[] b = new byte[10240];//准备一次读入10k
ByteArrayOutputStream os = new ByteArrayOutputStream();
while ((len = is.read(b)) > -1) {
System.out.println(len);//每次读取长度并不总是10k
os.write(b, 0, len);
}
con.disconnect();
/*2、解压,可以直接从URL连接的输入流解压ZipInputStream(con.getInputStream())*/
ZipInputStream zis = new ZipInputStream(new ByteArrayInputStream(os.toByteArray()));
ZipEntry ze = zis.getNextEntry();
System.out.println("文件名称:" + ze.getName());
ByteArrayOutputStream zos = new ByteArrayOutputStream();
while ((len = zis.read(b)) > -1) {
zos.write(b, 0, len);
}
System.out.println("文件大小:" + zos.size());
//System.out.println(zos.toString());//打印文件内容