我不想名字重复 2022-09-07 15:07 采纳率: 0%
浏览 48
已结题

文件流Copy,进来解释下

从hdfs上读取一个jar包,然后封装为压缩流返回,虽然声明的数组是50M大小,但每回读取原文件流只读取了8KB,请问是什么原因

代码是用scala写的,贴出来的是比较关键的代码,请凑合着看

//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()

img

根据声明的byte数组长度,原本的文件流也就270M,所以按说打印的日志 i的值也就5次;但现在根据打印的index值可以判断出,每次只复制了131072字节(128K),但byte数组的长度是50M,byte数组的长度足够,但为什么每次只向byte数组中只读了131072字节?

解决必采纳

  • 写回答

2条回答 默认 最新

  • 我不想名字重复 2022-09-07 15:15
    关注

    顶一下,不要沉了啊

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月14日
  • 创建了问题 9月7日

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献