Добавить заголовок записи (или строку / файл) в большой файл в Scala / Java - PullRequest
0 голосов
/ 20 ноября 2018

Каков наиболее эффективный (или рекомендуемый) способ добавления строки или файла в другой большой файл в Scala, предпочтительно без использования внешних библиотек?Большой файл может быть двоичным.

Например,

, если предваряющая строка: header_information|123.45|xyz\n

, а большой файл:

abcdefghijklmnopqrstuvwxyz0123456789
abcdefghijklmnopqrstuvwxyz0123456789
abcdefghijklmnopqrstuvwxyz0123456789
...

Я быожидайте получить:

header_information|123.45|xyz
abcdefghijklmnopqrstuvwxyz0123456789
abcdefghijklmnopqrstuvwxyz0123456789
abcdefghijklmnopqrstuvwxyz0123456789
...

1 Ответ

0 голосов
/ 20 ноября 2018

Я придумаю следующее решение:

  1. Превратить предварительно добавленную строку / файл в InputStream
  2. Превратить большой файл в InputStream
  3. "Объединить" InputStreams вместе, используя java.io. SequenceInputStream
  4. Используйте 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
        )
      }
    }
    

Протестировано для файла ~ 30 ГБ, на MacBookPro (~ 3,3 ГГц / 16 ГБ) прошло ~ 40 секунд.

Этот подход можно использовать (при необходимости) для объединения нескольких разделенных файлов, созданных, например, Искровой двигатель.

...