-2

我已经搞砸了一段时间,它变得越来越好,但对我来说还是有点慢。任何人都可以帮助加快速度/使设计更好吗?

此外,文件只能是数字,文件必须以文件扩展名“.dat”结尾。我从未添加过检查,因为我觉得没有必要。

public void preloadModels() {
    try {
        File directory = new File(signlink.findcachedir() + "raw", File.separator);
        File[] modelFiles = directory.listFiles();
        for (int modelIndex = modelFiles.length - 1;; modelIndex--) {
            String modelFileName = modelFiles[modelIndex].getName();
            byte[] buffer = getBytesFromInputStream(new FileInputStream(new File(directory, modelFileName)));
            Model.method460(buffer, Integer.parseInt(modelFileName.replace(".dat", "")));
        }
    } catch (Throwable e) {
        return;
    }
}

public static final byte[] getBytesFromInputStream(InputStream inputStream) throws IOException {
    byte[] buffer = new byte[32 * 1024];
    int bufferSize = 0;
    for (;;) {
        int read = inputStream.read(buffer, bufferSize, buffer.length - bufferSize);
        if (read == -1) {
            return Arrays.copyOf(buffer, bufferSize);
        }
        bufferSize += read;
        if (bufferSize == buffer.length) {
            buffer = Arrays.copyOf(buffer, bufferSize * 2);
        }
    }
}
4

3 回答 3

1

我会做以下事情。

public void preloadModels() throws IOException {
    File directory = new File(signlink.findcachedir() + "raw");
    for (File file : directory.listFiles()) {
        if (!file.getName().endsWith(".dat")) continue;
        byte[] buffer = getBytesFromFile(file);
        Model.method460(buffer, Integer.parseInt(file.getName().replace(".dat", "")));
    }
}

public static byte[] getBytesFromFile(File file) throws IOException {
    byte[] buffer = new byte[(int) file.length()];
    try (DataInputStream dis = new DataInputStream(new FileInputStream(file))) {
        dis.readFully(buffer);
        return buffer;
    }
}

如果这仍然太慢,最有可能的限制是硬盘驱动器的速度。

于 2013-05-22T18:47:26.107 回答
0

如何使用 Apache Commons IOUtils 类。

IOUtils.toByteArray(InputStream input)
于 2013-05-22T18:49:13.247 回答
0

我认为最简单的方法是将所有目录内容添加到存档。看看java.util.zip。在第 7 版之前,它的文件名存在一些错误。还有 Apache Commons 实现。

于 2013-05-22T18:56:28.887 回答