diff options
author | Raphael Jolly <rjolly@users.sourceforge.net> | 2013-03-09 21:54:22 +0100 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2013-03-11 22:35:54 -0700 |
commit | 3e8f8ddb2ac057ad82e1a7e37f59baff1c0e15ac (patch) | |
tree | 5b510ff5f73e1c645da400ca759bc9d1a0f34fd8 /src/reflect/scala/reflect/io/AbstractFile.scala | |
parent | 9eb21e54bdb1ea23b4215c641c98bd90a8b859cf (diff) | |
download | scala-3e8f8ddb2ac057ad82e1a7e37f59baff1c0e15ac.tar.gz scala-3e8f8ddb2ac057ad82e1a7e37f59baff1c0e15ac.tar.bz2 scala-3e8f8ddb2ac057ad82e1a7e37f59baff1c0e15ac.zip |
SI-874 reflect.io improvements
Diffstat (limited to 'src/reflect/scala/reflect/io/AbstractFile.scala')
-rw-r--r-- | src/reflect/scala/reflect/io/AbstractFile.scala | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/src/reflect/scala/reflect/io/AbstractFile.scala b/src/reflect/scala/reflect/io/AbstractFile.scala index 4d6f14c71d..8b69efc749 100644 --- a/src/reflect/scala/reflect/io/AbstractFile.scala +++ b/src/reflect/scala/reflect/io/AbstractFile.scala @@ -7,7 +7,7 @@ package scala.reflect package io -import java.io.{ FileOutputStream, IOException, InputStream, OutputStream, BufferedOutputStream } +import java.io.{ FileOutputStream, IOException, InputStream, OutputStream, BufferedOutputStream, ByteArrayOutputStream } import java.io.{ File => JFile } import java.net.URL import scala.collection.mutable.ArrayBuffer @@ -54,6 +54,8 @@ object AbstractFile { if (url == null || !Path.isExtensionJarOrZip(url.getPath)) null else ZipArchive fromURL url } + + def getResources(url: URL): AbstractFile = ZipArchive fromManifestURL url } /** @@ -156,16 +158,28 @@ abstract class AbstractFile extends Iterable[AbstractFile] { @throws(classOf[IOException]) def toByteArray: Array[Byte] = { val in = input - var rest = sizeOption.getOrElse(0) - val arr = new Array[Byte](rest) - while (rest > 0) { - val res = in.read(arr, arr.length - rest, rest) - if (res == -1) - throw new IOException("read error") - rest -= res + sizeOption match { + case Some(size) => + var rest = size + val arr = new Array[Byte](rest) + while (rest > 0) { + val res = in.read(arr, arr.length - rest, rest) + if (res == -1) + throw new IOException("read error") + rest -= res + } + in.close() + arr + case None => + val out = new ByteArrayOutputStream() + var c = in.read() + while(c != -1) { + out.write(c) + c = in.read() + } + in.close() + out.toByteArray() } - in.close() - arr } /** Returns all abstract subfiles of this abstract directory. */ |