2015-05-04 100 views
0

我正在編寫一個程序,它讀取大量數據文件並在其中找到特殊點。 對於這一點,我使用的掃描儀,它可以分析數據(這看起來像:)BufferedReader或掃描儀? (Java)

-0.46368701 0.02136296 

-0.46304701 0.03045747 

-0.46240701 0.03045747 

第一雙去一個陣列和第二到另一個。

對於這個問題:程序太慢了。在這種情況下,我可以很好地使用bufferedReader嗎?我不知道解析它的參數是否會導致程序不足。

謝謝!

BTW - 該方案的主要方法看起來像:

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; 
} 
+4

什麼是你的代碼是什麼樣子? – Kayaman

+1

我通常使用BufferedReader。但認爲可能還有其他原因。只有這麼多的信息才能導致解決方案。你是否爲單個值創建單獨的數組? – Kartic

+0

顯示你的代碼會很好。 – JonasCz

回答

0

閱讀:Scanner vs. BufferedReader

總而言之,BufferedReader中速度更快,但是那是因爲它不記號化。掃描儀在哪裏。現在,如果你想使用bufferedreader,你可以只需要自己對數據進行排序,但需要更多的代碼,而且不一定更快。

當面對這些問題時總是試試自己。爲什麼不讓自己使用bufferedreader?這將是一次體驗。

現在,如果你覺得你的計劃是可笑緩慢......像明明什麼不妥類型的慢,那麼你需要表現出更多的代碼,做更多的調試

+0

這不是很慢,但我認爲它可以更快。現在,當我通過bufferedreader得到我的產品線時,我需要對其進行操作,並且我不知道這種方法比掃描儀(每個新線路的新掃描儀聽起來都不那麼好)。 – YosefBro

+0

那麼一旦你在bufferedreader中讀取一行,你可以使用字符串操作ex ... string.split(「」)並獲取2 String,或者你可以使用StringTokenizer https://docs.oracle.com/javase/7/docs/api/ java/util/StringTokenizer.html這是掃描儀使用的 –

+0

StringTokenizer似乎是正確的解決方案。你能建議我該如何實施它嗎? – YosefBro