diff options
author | Paul Phillips <paulp@improving.org> | 2011-12-24 13:45:27 -0800 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2011-12-25 00:52:57 -0800 |
commit | 8834d3c191e37dfa31ae11605596ce2b641ea083 (patch) | |
tree | a6fc164365ea07ccd041791c458b33cffd628853 /src/compiler/scala/tools/nsc/io/ZipArchive.scala | |
parent | 4d5a025e42c00039aa2e26ec6a7aa5a7b13239ae (diff) | |
download | scala-8834d3c191e37dfa31ae11605596ce2b641ea083.tar.gz scala-8834d3c191e37dfa31ae11605596ce2b641ea083.tar.bz2 scala-8834d3c191e37dfa31ae11605596ce2b641ea083.zip |
Optimization in ZipArchive.
Avoid creating empty array when len == 0.
Diffstat (limited to 'src/compiler/scala/tools/nsc/io/ZipArchive.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/io/ZipArchive.scala | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/io/ZipArchive.scala b/src/compiler/scala/tools/nsc/io/ZipArchive.scala index 90cb827280..01f3619ba7 100644 --- a/src/compiler/scala/tools/nsc/io/ZipArchive.scala +++ b/src/compiler/scala/tools/nsc/io/ZipArchive.scala @@ -88,7 +88,7 @@ abstract class ZipArchive(override val file: JFile) extends AbstractFile with Eq val entries = mutable.HashMap[String, Entry]() override def isDirectory = true - override def iterator = entries.valuesIterator + override def iterator: Iterator[Entry] = entries.valuesIterator override def lookupName(name: String, directory: Boolean): Entry = { if (directory) entries(name + "/") else entries(name) @@ -110,7 +110,7 @@ abstract class ZipArchive(override val file: JFile) extends AbstractFile with Eq } final class FileZipArchive(file: JFile) extends ZipArchive(file) { - def iterator = { + def iterator: Iterator[Entry] = { val zipFile = new ZipFile(file) val root = new DirEntry("/") val dirs = mutable.HashMap[String, DirEntry]("/" -> root) @@ -151,13 +151,17 @@ final class FileZipArchive(file: JFile) extends ZipArchive(file) { } final class URLZipArchive(val url: URL) extends ZipArchive(null) { - def iterator = { + def iterator: Iterator[Entry] = { val root = new DirEntry("/") val dirs = mutable.HashMap[String, DirEntry]("/" -> root) val in = new ZipInputStream(new ByteArrayInputStream(Streamable.bytes(input))) @tailrec def loop() { val zipEntry = in.getNextEntry() + class EmptyFileEntry() extends Entry(zipEntry.getName) { + override def toByteArray: Array[Byte] = null + override def sizeOption = Some(0) + } class FileEntry() extends Entry(zipEntry.getName) { override val toByteArray: Array[Byte] = { val len = zipEntry.getSize().toInt @@ -186,7 +190,7 @@ final class URLZipArchive(val url: URL) extends ZipArchive(null) { if (zipEntry.isDirectory) dir else { - val f = new FileEntry() + val f = if (zipEntry.getSize() == 0) new EmptyFileEntry() else new FileEntry() dir.entries(f.name) = f } in.closeEntry() |