[英]BufferedReader or Scanner? (Java)
我正在編寫一個程序,該程序讀取大量數據文件並在其中找到特殊點。 為此,我使用的是掃描儀,它可以解析數據(看起來像這樣:)
-0.46368701 0.02136296
-0.46304701 0.03045747
-0.46240701 0.03045747
第一個雙精度數組分配給一個數組,第二個雙精度數組分配給另一個數組。
問題是:程序太慢了。 在這種情況下,我可以很好地使用bufferedReader嗎? 我不知道是否解析它的參數會使程序不足。
謝謝!
順便說一句-該程序的主要方法如下所示:
private void init() throws IOException{
try {
scan = new Scanner(file);
} catch (FileNotFoundException e) {
System.out.println(e.toString());
e.printStackTrace();
}
lines = countLines(file);
value = new double[lines];
time = new double[lines];
vMinValue = new Vector<Double>();
vMinTime = new Vector<Double>();
}
//fill in time[] and value[] arrays
private void readFile(){
count=0;
System.out.println("Reading file...\n");
//Get to the start of the info -=CORE=-
while(scan.hasNext()){
if(scan.next().equals("(V)")){
System.out.println("Reading only 'Channel A' Values \n ");
break;
}
}
while(scan.hasNext()){
time[count] = scan.nextDouble();
value[count] = scan.nextDouble();
count++;
if(value[count]==Double.NEGATIVE_INFINITY) count--;
}
scan.close();
System.out.println("Input File Has Been Closed \n");
}
private void addMins(double[] a,int range){
for(int i=0;i<a.length;i++){
if( isMin(i,range)){
if((vMinValue.isEmpty() || vMinValue.get(vMinValue.size()-1)!=a[i])){ // provides only one minimum point
vMinValue.add((Double)value[i]);
vMinTime.add((Double)time[i]);
managMin.add(value[i]);
}
}
}
private boolean isMin(int i,int range){
boolean result = true;
for(int j=-range;j<=range;j++){
if(j==0) continue;
if(i+j<0 || i+j>value.length-1) continue;
if(value[i]>value[i+j]) return false;
}
return result;
}
閱讀此內容: 掃描程序與BufferedReader
總而言之,bufferedreader更快,但這是因為它不會標記化。 就像掃描儀一樣。 現在,如果您想使用bufferedreader,就可以自己對數據進行排序,但這需要更多的代碼,並且不一定會更快。
遇到這些問題時,請務必嘗試一下。 為什么不自己制作一個使用bufferedReader的顯示器呢? 這將是一次體驗。
現在,如果您覺得自己的程序速度太慢了……顯然很慢,那是錯誤的話,那么您需要顯示更多的代碼並進行更多的調試
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.