我有以下方法(实际上是一个函数)
def addToJar(jarOut: JarOutputStream, file: File, reldir: String): Unit =
{
val fName = reldir + file.getName
val fNameMod = if (file.isDirectory) fName + "/" else fName
val entry = new JarEntry(fNameMod)
entry.setTime(file.lastModified)
jarOut.putNextEntry(entry)
if (file.isDirectory)
{
jarOut.closeEntry
file.listFiles.foreach(i => addToJar(jarOut, i, fName + "/"))
}
else
{
var buf = new Array[Byte](1024)
val in = new FileInputStream(file)
Stream.continually(in.read(buf)).takeWhile(_ != -1).foreach(jarOut.write(buf, 0, _))
in.close
jarOut.closeEntry()
}
}
我在查看其他问题和博客文章后写了这篇文章,但仍然存在以下问题:
应该有 try-catch 块吗?
是否可以使用 Scala.io 类代替 java.io.fileinputstream?
缓冲区写入方法比使用 java.nio.channels.FileChannel、Apache Commons IO FileUtils.copyFile 或 Java 7 的 Files.copy 更快是否正确?
对于一个大项目来说,用 C++ 编写整个 jar 创建实用程序并调用它一次是否可以获得显着的性能?
注意:在撰写 Scala 2.11 的最后一个开发里程碑时,M6 尚未发布。但是我的理解是,Scala.io 不会在其中添加任何内容。