【发布时间】:2018-01-31 19:47:24
【问题描述】:
所以我一直在研究 java 程序,它可以扫描和解析许多文件,用它们的可读格式替换术语(例如 func_123)。
提供定义的文件共有三个,因此每个文件都需要解析三次。
程序将定义加载到名为 Pair 的类中,并将该对放入 ArraryList。
然后程序逐行遍历每个文件并替换任何匹配的字符串。为每个文件创建并运行一个新线程。
那么解析、替换和将这些更改写入新文件的最快/最有效的方法是什么?
以下是我目前所拥有的。
解析每个文件的代码:
Thread thread = new Thread() {
@Override
public void run() {
try {
File temp = File.createTempFile("temp", "tmp");
BufferedReader br = new BufferedReader(new FileReader(file));
BufferedWriter bw = new BufferedWriter(new FileWriter(temp));
String s = null;
while ((s = br.readLine()) != null) {
s = Deobfuscator2.deobfuscate(s);
bw.write(s);
bw.newLine();
}
bw.close();
br.close();
writeFromFileTo(temp, file);
temp.delete();
} catch (IOException e) {
e.printStackTrace();
}
}
};
解码每个字符串的代码:
public static String deobfuscate(String s) {
for (Pair<String, String> pair : fieldsMappings) {
s = s.replaceAll(pair.key, pair.value);
}
for (Pair<String, String> pair : methodsMappings) {
s = s.replaceAll(pair.key, pair.value);
}
for (Pair<String, String> pair : paramsMappings) {
s = s.replaceAll(pair.key, pair.value);
}
return s;
}
对类:
public static class Pair <K,V> {
private K key;
private V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
public K getKey() {
return key;
}
public V getValue() {
return value;
}
}
帮助函数将内容从一个文件复制到另一个文件:
private void writeFromFileTo(File file1, File file2) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(file1));
BufferedWriter bw = new BufferedWriter(new FileWriter(file2));
String s = null;
while ((s = br.readLine()) != null) {
bw.write(s);
bw.newLine();
}
bw.close();
br.close();
}
我试图尽可能清楚并提供所有相关代码,但如果您需要/想要其他任何内容,请告诉我。
我的代码有效,但我的问题是,当有很多文件要解析时,这样做似乎需要一些时间,并且可能会占用大量资源(如果我不限制线程)。总共有大约 33,000 多个(每个 10,000 多个)定义可能需要被替换。
【问题讨论】:
标签: java string performance file parsing