将 header 记录(或字符串/文件)添加到 Scala 中的大文件 / Java
Prepend header record (or a string / a file) to large file in Scala / Java
在 Scala 中将字符串或文件添加到另一个大文件之前最有效(或推荐)的方法是什么,最好不使用外部库?大文件可以是二进制的。
例如
如果前置字符串是:
header_information|123.45|xyz\n
大文件是:
abcdefghijklmnopqrstuvwxyz0123456789
abcdefghijklmnopqrstuvwxyz0123456789
abcdefghijklmnopqrstuvwxyz0123456789
...
我希望得到:
header_information|123.45|xyz
abcdefghijklmnopqrstuvwxyz0123456789
abcdefghijklmnopqrstuvwxyz0123456789
abcdefghijklmnopqrstuvwxyz0123456789
...
我想出了以下解决方案:
- 将前置 string/file 转换为 InputStream
- 将大文件转为InputStream
- "Combine" InputStreams 一起使用 java.io.SequenceInputStream
使用java.nio.file.Files.copy写入目标文件
object FileAppender {
def main(args: Array[String]): Unit = {
val stringToPrepend = new ByteArrayInputStream("header_information|123.45|xyz\n".getBytes)
val largeFile = new FileInputStream("big_file.dat")
Files.copy(
new SequenceInputStream(stringToPrepend, largeFile),
Paths.get("output_file.dat"),
StandardCopyOption.REPLACE_EXISTING
)
}
}
在约 30GB 的文件上进行了测试,在 MacBookPro (3.3GHz/16GB) 上花费了约 40 秒。
此方法可用于(如有必要)合并由例如创建的多个分区文件。星火引擎。
在 Scala 中将字符串或文件添加到另一个大文件之前最有效(或推荐)的方法是什么,最好不使用外部库?大文件可以是二进制的。
例如
如果前置字符串是:
header_information|123.45|xyz\n
大文件是:
abcdefghijklmnopqrstuvwxyz0123456789
abcdefghijklmnopqrstuvwxyz0123456789
abcdefghijklmnopqrstuvwxyz0123456789
...
我希望得到:
header_information|123.45|xyz
abcdefghijklmnopqrstuvwxyz0123456789
abcdefghijklmnopqrstuvwxyz0123456789
abcdefghijklmnopqrstuvwxyz0123456789
...
我想出了以下解决方案:
- 将前置 string/file 转换为 InputStream
- 将大文件转为InputStream
- "Combine" InputStreams 一起使用 java.io.SequenceInputStream
使用java.nio.file.Files.copy写入目标文件
object FileAppender { def main(args: Array[String]): Unit = { val stringToPrepend = new ByteArrayInputStream("header_information|123.45|xyz\n".getBytes) val largeFile = new FileInputStream("big_file.dat") Files.copy( new SequenceInputStream(stringToPrepend, largeFile), Paths.get("output_file.dat"), StandardCopyOption.REPLACE_EXISTING ) } }
在约 30GB 的文件上进行了测试,在 MacBookPro (3.3GHz/16GB) 上花费了约 40 秒。
此方法可用于(如有必要)合并由例如创建的多个分区文件。星火引擎。