我正在讀取一個文件以供稍後解析。該文件的大小不太可能超過MB,所以在這個階段對我來說這可能不是一個關鍵問題。但出於最佳實踐原因,我想知道什麼時候執行操作的最佳時間。執行操作的最佳時間:循環內或循環後
例子:
使用我從http://www.dzone.com/snippets/java-read-file-string粘貼的方法,我讀緩衝區爲一個字符串。我現在想刪除所有的空格。我的方法是目前這樣的:
private String listRaw;
public boolean readList(String filePath) throws java.io.IOException {
StringBuffer fileData = new StringBuffer(1024);
BufferedReader reader = new BufferedReader(
new FileReader(filePath));
char[] buf = new char[1024];
int numRead=0;
while((numRead=reader.read(buf)) != -1){
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
buf = new char[1024];
}
reader.close();
listRaw = fileData.toString().replaceAll("\\s","");
return true;
}
所以,我從我保存它的時間字符串中刪除所有空白 - 在它的整體 - 一類變量。
對我來說,這意味着更少的處理,但更多的內存使用。出於最佳實踐原因,我會在readData
變量上應用replaceAll()
操作時更好嗎,因爲我將它追加到fileData
?使用更多的處理,但避免傳遞多餘的空白。
我想這對於一個像我正在工作的小文件幾乎沒有影響,但如果它是一個200MB的日誌文件呢?
這是完全取決於個案還是我有更好的一致意見?
感謝您輸入的每個人。我相信你已經幫助我將自己的思維定向爲編寫Java的正確方向。
我已更新我的代碼,以考慮所提出的要點。包括唐羅比的建議,在某些時候,我可能想保留空間。希望事情現在讀得更好!
private String listRaw;
public boolean readList(String filePath) throws java.io.IOException {
StringBuilder fileData = new StringBuilder(51200);
BufferedReader reader = new BufferedReader(new FileReader(filePath));
char[] buf = new char[51200];
boolean spaced = false;
while(reader.read(buf) != -1){
for(int i=0;i<buf.length;i++) {
char c = buf[i];
if (c != '\t' && c != '\r' && c != '\n') {
if (c == ' ') {
if (spaced) {
continue;
}
spaced = true;
} else {
spaced = false;
}
fileData.append(c);
}
}
}
reader.close();
listRaw = fileData.toString().trim();
return true;
}
測量它並找出!這樣你就知道哪個更快,而不是別人認爲應該更快。 – 2012-07-28 17:19:43
好點!作爲一名Java新手 - 目前沒有任何專門的java教科書 - 我意識到從壞習慣開始。雖然我相信在一天結束的時候我會有很多。 – 2012-07-28 17:32:41