Метод добавления из скалярного потока, вызывающий бесконечный цикл
Я использую этот код с сайта скалярного потока, он работает с методом, но он не работает, когда я пытаюсь использовать append, он выглядит как бесконечный цикл и никогда не заканчивается. Причина, по которой я хочу использовать метод добавления, состоит в том, что я не хочу переписывать файл с помощью метода to.
io.linesR(t)
.intersperse("\n")
.pipe(text.utf8Encode)
.to(io.fileChunkW(target))
.run.run //success
files.foreach(t => {
io.linesR(t)
.intersperse("\n")
.pipe(text.utf8Encode)
.append(io.fileChunkW(target))
.run.run
}) //the program keeps running, it looks like in an infinite loop
Я в замешательстве, может кто-нибудь объяснить мне, что здесь происходит
Спасибо заранее
1 ответ
'append' - это не добавление к файлу, это комбинатор для добавления одного процесса к другому. Я не могу сказать, что вы действительно получаете с добавлением в вашем случае, что-то странное, я думаю, что вы получаете бесконечный поток функций ByteVector => Task[Unit], и поэтому он никогда не завершается.
Вам нужен собственный метод fileChunkW, например, вы можете сделать это так:
def appendFileChunkW(f: String, bufferSize: Int = 4096, append: Boolean = true): Sink[Task,ByteVector] =
io.chunkW(new BufferedOutputStream(new FileOutputStream(f, append), bufferSize))
files.foreach(t => {
io.linesR(t)
.intersperse("\n")
.pipe(text.utf8Encode)
.to(appendFileChunkW(target))
.run.run
})