2016-12-14 4 views
1

У меня есть метод, который принимает SCALA этого источника в соответствии с моими требованиямиКак создать раковину для чтения всех байтов из источника?

def func(data : Source[ByteString,Any]) { ... } 

все, что я хочу сделать, сейчас, чтобы прочитать все байты из этого источника и записать их в файл. Я прочитал много примеров, которые делают более сложные вещи, такие как сброс вычисления по всем значениям. Я хочу что-то более простое, просто получая байты в порядке, чтобы я мог их выписать. Как мне это сделать?

ответ

4

Я думаю, FileIO.toFile должен работать.

Он создает Sink, который принимает входящие байты и записывает их в файл.

Обратите внимание, что поскольку вы используете потоки, вы должны избегать думать о терминах «получения всех данных», чтобы отправить его где-нибудь. Вместо этого вы должны подумать о том, «что мне делать с этим куском данных, которые я получил». Если, например, размер вашего источника данных, нумеруемый в гигабайтах, попытка собрать все данные в одном месте почти наверняка вызовет OutOfMemoryError.

1

Я хочу внести свой вклад @ ответ Дилана, давая пример:

def func(src : Source[ByteString,Any], filePath:String) { 
    val sink: Sink[ByteString, Future[IOResult]] = FileIO.toPath(Paths.get(props.path)) 
    src.runWith(sink) 
}