【问题标题】:How do you divide a byte array into chunks in Scala?如何在 Scala 中将字节数组划分为块?
【发布时间】:2018-12-26 23:15:03
【问题描述】:

我正在尝试基于从 0MB 到 15MB 的各种文件大小来实现分块逻辑。我有一个文件的字节数组,但我试图将数组分块成小于 5MB 的块。

例如,如果我有一个 10.6MB(1.06e+7 字节)的文件,我想将其分成单独的字节数组,加起来为 1.06e+7 字节。这应该能够处理任何

var chunkSize: Int = 5242880
    for(index <- 0 to byteArraySize by chunkSize) {

          if (index == 0){
            tempArray = byteArray.slice(index, chunkSize)
          } else{
            tempArray = byteArray.slice(index+1, (index + chunkSize))
          }
// upload tempArray to DB
          segmentIndex = segmentIndex + 1

        }

我遇到的问题是最后一个块的大小不合适。应该是分块成 5242880 个字节数组后字节数组中剩下的内容。

【问题讨论】:

    标签: arrays scala chunks chunking chunked


    【解决方案1】:

    由于grouped-方法返回一个惰性迭代器,因此可能不会浪费任何内存,我看不出有什么理由不使用它:

    for (chunk <- byteArray.grouped(chunkSize)) {
      // do sth. with `chunk`
    }
    

    以下是不使用内置方法的方法:

    def forEachChunk[A](arr: Array[A], chunkSize: Int)(f: Array[A] => Unit): Unit = {
      for (i <- 0 to arr.size by chunkSize) {
        f(arr.slice(i, (i + chunkSize) min arr.size))
      }
    }
    

    示例:

    forEachChunk((0 to 10).toArray, 3){ chunk => 
      println(chunk.toList)
    }
    

    打印:

    List(0, 1, 2)
    List(3, 4, 5)
    List(6, 7, 8)
    List(9, 10)
    

    【讨论】:

      猜你喜欢
      • 2018-07-18
      • 2017-11-20
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多