从jar中高效提取文件

lui*_*bal 1 java copy jar extract

我有一个用Java编写的应用程序,它使用一个jar文件(它使用多个,但这不是重点).

事实是,我正在使用的Jar文件包含我绝对必须提取到文件系统的文件.

到目前为止,我正在使用Class.getResourceAsStream和FileOutputStream,但这种方法有点慢.请注意,其中一些文件是基于文本的,但其他文件只是二进制文件.

因此,除了尝试减少从JAR中提取文件的需求之外,还有针对这些任务的任何优化(例如更充分的功能).

请注意,我的应用程序是基于Java 6的,我希望将外部依赖性降至最低.

编辑:为了将来参考,我的OLD(inefficent)代码是:

int c;
while((c = is.read())!=-1){
    fos.write(c);
}
Run Code Online (Sandbox Code Playgroud)

对于新的,更快的代码,请参阅接受的回复.

Jon*_*eet 7

你有控制jar文件?如果您将其创建为未压缩,则可能会使其更快.显然它会让jar文件更大......

要检查的另一件事 - 你如何提取文件?例如,如果你逐字节地进行操作,那将会非常缓慢.使用这样的东西:

public static void copyStream(InputStream input, OutputStream output)
     throws IOException
{
    // Reads up to 8K at a time. Try varying this.
    byte[] buffer = new byte[8192];
    int read;

    while ((read = input.read(buffer)) != -1)
    {
        output.write(buffer, 0, read);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你已经这样做了,你能告诉我们更多信息吗?有点慢"有点慢"?它与使用jar实用程序提取jar文件相比如何?