Я пытаюсь обработать большой двоичный файл с помощью scala.Если возможно, я бы хотел использовать функциональный подход.Мой основной метод для этого выглядит прямо сейчас:
def getFromBis( buffer:List[Byte], bis:BufferedInputStream ):(Byte,List[Byte],Boolean) = {
buffer match {
case Nil =>
val buffer2 = new Array[Byte](100000)
bis.read(buffer2) match {
case -1 => (-1,Nil,false)
case _ =>
val buffer3 = buffer2.toList
(buffer3.head,buffer3.tail,true)
}
case b::tail => return (b,tail,true)
}
}
Требуется буфер списка и буферизованный входной поток.Если буфер не пустой, он просто возвращает заголовок и хвост, если он пустой, он получает следующий кусок из файла и вместо этого использует его в качестве буфера.
Как видите, это не оченьфункциональны.Я пытаюсь сделать это так, чтобы было как можно меньше базовых вызовов, поэтому я делаю это частями.Проблема здесь в новом массиве.Каждый раз, когда я запускаю функцию, она создает новый массив, и, судя по постоянно увеличивающемуся использованию памяти при запуске программы, я не думаю, что они уничтожаются.
Мой вопрос таков: есть лилучший способ чтения большого файла с использованием scala?Я хотел бы сохранить полностью функциональный подход, но по крайней мере мне нужна функция, которая могла бы действовать как черный ящик для остальной части моей функциональной программы.