Я только что создал простой алгоритм последовательного медианного фильтра и использовал два сканера для обработки ввода командной строки и сканер для чтения файла. Теперь проблема в том, что у меня есть текстовый файл из 2 000 000 строк из 2 столбцов текста в форме , и только чтение файла занимает много времени (более 2 минут).
По сути, программа просто захватывает входные данные, использует алгоритм медианного фильтра и записывает в выходной файл.
Ниже мой код:
main.java
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class main {
public static void main(String args[]) throws NumberFormatException, IOException{
String inFile; //Input file name.
int filterSize; //Filter size (odd integer >= 3).
String outFile; //Output file name.
int arraySize;
List elements = new ArrayList();
int index = 0;
//Scanner to take input file name, filter size and output file name.
Scanner keyboardInput = new Scanner(System.in);
System.out.println("Enter your keyboard input as follows: = 3> ");
//Assigning values to variables.
inFile = keyboardInput.next();
filterSize = keyboardInput.nextInt();
outFile = keyboardInput.next();
// //Reading file
// Scanner readFile = new Scanner(new File(inFile));
// readFile.nextInt(); //Get Array Size
//
// //Add elements into ArrayList
// while(readFile.hasNext()){
// readFile.nextInt();
// elements.add(Float.parseFloat(readFile.next()));
// }
//Reading file
BufferedReader br = new BufferedReader(new FileReader(inFile));
br.readLine(); //Get Array Size
String line;
while((line = br.readLine())!= null){
String[] nums = line.split(" ");
int val = Integer.valueOf(nums[0]);
elements.add(Float.valueOf(nums[1]));
}
br.close();
new Serial(elements, filterSize, outFile);
}
}
Serial.java
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Serial {
int filterSize; //Filter size (odd integer >= 3).
String outFile; //Output file name.
int arraySize;
List elements = new ArrayList();
int index = 0;
public Serial(List elements, int filterSize, String outFile) throws FileNotFoundException, UnsupportedEncodingException {
this.elements = elements;
this.filterSize= filterSize;
this.outFile = outFile;
List tempElements = new ArrayList();
List outputElements = new ArrayList();
//Add first boundary element to ouput ArrayList
outputElements.add(this.elements.get(0));
while(elements.size() >= filterSize){
for(int i = 0; i