2015-05-04 55 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