Scala 使用FileInputStream和FileOutputStream进行文件的复制

最近在实验室做一个项目,涉及到从InputStream中读数据,然后再利用OutputStream写回本地文件系统中。

中间被一个数组越界的问题卡了一会。特记录如下

val image = blob.getInputStream();
    val image_url = "xxx";
    val fos = new FileOutputStream(image_url);
    val buffer = new Array[Byte](10240);
    var size: Int = 0;
    while(size != -1){
      fos.write(buffer, 0, size);
      size=image.read(buffer); //Scala中这个Size的位置很重要
    }
    image.close();
    fos.close();

为什么说Scala中这个位置很重要呢,因为在Java中的写法是:

while((size = image.read(buffer)!=-1){
    
    }

而Scala貌似并不支持这种写法,在size的值是-1后仍然会进入循环,调用write方法,这自然就导致了越界报错。

因此要把size的赋值拿出来,放在循环体里边做,同时也要注意size赋值与write操作的先后顺序。

说到底,今天被卡住还是因为自己学艺不精,Scala语法不熟导致的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值