-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を見てください。7th バージョンより前のファイル名にはいくつかのバグがあります。Apache Commons の実装もあります。

于 2013-05-22T18:56:28.887 に答える