arrays - 如何在 Scala 中将字节数组划分为块?
问题描述
我正在尝试基于从 0MB 到 15MB 的各种文件大小来实现分块逻辑。我有一个文件的字节数组,但我试图将数组分块成小于 5MB 的块。
例如,如果我有一个 10.6MB(1.06e+7 字节)的文件,我想将它分成单独的字节数组,加起来 1.06e+7 字节。这应该能够处理任何 <15MB 的文件大小。
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 字节数组后留在字节数组中的内容。
解决方案
由于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)
推荐阅读
- razor - Razor 类库,不优先主 App
- excel - 使用 unicode 字符从本地 HTML 中抓取表格
- python - 如何在 python3 数据类中断言类型?
- html - 如何在当前菜单中创建下拉菜单
- java - 执行 findAll() 时 Spring boot 和 couchbase 中的 InvalidDataAccessResourceUsageException
- php - 当请求像“/example.php/”这样的.php但显示内容时,css不起作用
- amazon-web-services - AWS kubectl:无法连接到服务器:EOF
- java - 有没有更好的方法来交换玩家符号?
- android - 请迁移 JSON-RPC 和全局 HTTP 批处理端点 - Google Drive API
- javascript - 显示已完成的任务数 VS JS ToDo 列表中的任务数