From 790dcd87b310109ee1416dfc9a47df4bf5ba7e83 Mon Sep 17 00:00:00 2001 From: malayeri Date: Mon, 7 Mar 2011 22:35:36 +0000 Subject: [PATCH] Modify BufferedSource to use a BufferedLineIterator to speed up line-by-line reads on large files. Updated testfile which used this class. Closes #4186. Review (of fft.check) by prokopec. git-svn-id: http://lampsvn.epfl.ch/svn-repos/scala/scala/trunk@24406 5e8d7ff9-d8ef-0310-90f0-a4852d11357a --- src/library/scala/io/BufferedSource.scala | 17 +++++++++++++++-- test/files/specialized/fft.check | 2 +- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/library/scala/io/BufferedSource.scala b/src/library/scala/io/BufferedSource.scala index fbc4ddc68..39ff7ab44 100644 --- a/src/library/scala/io/BufferedSource.scala +++ b/src/library/scala/io/BufferedSource.scala @@ -6,8 +6,6 @@ ** |/ ** \* */ - - package scala.io import java.io.{ InputStream, BufferedReader, InputStreamReader } @@ -27,5 +25,20 @@ class BufferedSource(inputStream: InputStream, bufferSize: Int)(implicit val cod val reader = bufferedReader() Iterator continually (codec wrap reader.read()) takeWhile (_ != -1) map (_.toChar) } + + class BufferedLineIterator extends Iterator[String] { + val bufReader = BufferedSource.this.bufferedReader() + var nextLine = bufReader.readLine + + override def hasNext() = nextLine != null + + override def next(): String = { + val result = nextLine + nextLine = bufReader.readLine + result + } + } + + override def getLines(): Iterator[String] = new BufferedLineIterator } diff --git a/test/files/specialized/fft.check b/test/files/specialized/fft.check index f61fd55f5..eb56a2a87 100644 --- a/test/files/specialized/fft.check +++ b/test/files/specialized/fft.check @@ -1,4 +1,4 @@ Processing 65536 items Boxed doubles: 0 -Boxed ints: 786441 +Boxed ints: 2 Boxed longs: 1442031