//jarPath:hdfs上一个jar包路径,这里调用自己封装的工具类获取的文件流
val inputStream = HdfsUtil.getFSDataInputStream(jarPath)
val byteArrayOutputStream = new ByteArrayOutputStream()
val zos = new ZipOutputStream(byteArrayOutputStream)
val jarName = jarPath.substring(jarPath.lastIndexOf("/")+1)
val zipEntry:ZipEntry = new ZipEntry(jarName)
zos.putNextEntry(zipEntry)
var flag = true
var index = 0;
var i:Int = 0;
while(flag){
val byte:Array[Byte] =new Array[Byte](1024*1024*50);
index = inputStream.read(byte,0,byte.length)
//这里特地打印了每次读取的index位置(字节长度)
println("----------------------index------------------:"+index)
//这里还特意打印了数组的长度
println("----------------------byte length------------------:"+byte.length)
if (index>0){
i=i+1;
//write了多少次
println("--------------i---------------:"+i)
zos.write(byte,0,index)
}else{
flag = false
}
}
zos.closeEntry()
zos.close()
根据声明的byte数组长度,原本的文件流也就270M,所以按说打印的日志 i的值也就6次;但现在根据打印的index值可以判断出,每次只复制了131072字节(128K),但byte数组的长度是50M,byte数组的长度足够,但为什么每次只向byte数组中只读了131072字节?
wtf?
注意:这里第一行的inputStream类型是FSDataInputStream,我还特地改为读取本地的文件,inputStream返回值是FileInputStream类型时,byte数组一次就可以读byte.length那么长。。。