Учитывая несколько имен файлов:
val fileNames : Iterable[String] = ???
Можно создать Source
, который будет выдавать содержимое файлов, соединенных вместе, используя flatMapConcat
:
val chunkSize = 8192
val chunkSource : Source[ByteString, _] =
Source.apply(fileNames)
.map(fileName => Paths get fileName)
.flatMapConcat(path => FileIO.fromPath(path, chunkSize))
Это выдаст значения фиксированного размера ByteString
, которые имеют длину chunkSize
, за исключением, возможно, последнего значения, которое может быть меньше.
Если вы хотите разбить строки по некоторому разделителю, вы можете использовать Framing
:
val delimiter : ByteString = ???
val maxFrameLength : Int = ???
val framingSource : Source[ByteString, _] =
chunkSource.via(Framing.delimiter(delimiter, maxFrameLength))