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语法不熟导致的。

你可能感兴趣的:(Scala 使用FileInputStream和FileOutputStream进行文件的复制)