크기가 약 20MB이고 약 50 만 건의 파일을 읽었습니다. 특정 필드를 키로, 다른 필드를 값으로 사용하여 HashMap에 레코드를로드하고 있습니다. 이 맵의 키 - 값은 후속 프로세스에서 사용됩니다.Java - 파일 읽기 및 HashMap에서로드 - 시간을 줄이는 방법?
파일을 단순히 읽는 시간은 무시해도 좋습니다. 그러나 HashMap에 필드와로드를 구문 분석하는 데는 몇 시간이 걸릴 것으로 보입니다. 코드는
InputStream in = new FileInputStream(new File(file));
br = new BufferedReader(new InputStreamReader(in), 102400);
if (br != null) {
for (String record; (record = br.readLine()) != null;) {
sb = new StringBuilder(record);
map.put(sb.substring(findStartIndex(fieldName1),findEndIndex(fieldName1)), sb.substring(findStartIndex(fieldName2),findEndIndex(fieldName2)));
}
}
findStartIndex()와 findEndIndex()
는 레코드 형식 XML을 구문 분석하고 필드의 시작과 끝 인덱스를 찾을 수있는 방법이 있습니다, 다소 보이는이를 좋아한다.이 과정을 여러 파일에 대해 반복해야합니다. 어쩌면 런타임을 줄이기 위해 저에게 제안하십시오. 어떤 도움을 주셔서 감사합니다. 감사.
편집 :
입력 필드 이름과 인덱스 값이 XML 인 findStartindex 아래와 같이 findEndindex을 구현했습니다. 나는 각각에 대해 SaxParser, getters 및 setter를 사용했다. 시작과 끝 값을 발견했다.
실제로 걸리는 시간은 얼마나됩니까? – markspace
파일을 데이터 저장 용으로 사용하는 경우 SQL 데이터베이스를 사용하는 것이 좋습니다. – Victor2748
findStartIndex 및 findEndIndex는 어떻게 구현합니까? 20MB/500000 레코드가 오래 걸리지 않습니다. – nhahtdh