저는 이력 파서를 작성하고 있습니다. 이미 로깅 작업 (텍스트 기반)을 수행 한 응용 프로그램이 있습니다. 이제 관리자가 해당 로그를 읽을 응용 프로그램을 만들길 원합니다. 로그는 월말에 생성되며, [날짜]로 구분됩니다 :특정 바이트 (문자)로 바이트 배열 분할
[19-11-2014]
- 여기
어떤 일이 일어나는지 - 여기
[20 어떤 일이 일어나는지 -11-2014]
은 - 무슨 일이 여기
간다 - 여기 등
...
로그 파일이 작은 크기가있는 경우 어떤 일이 일어나는지, 문제의 기술 과정이 없다 g DataInputStream에 의해 바이트 []를 취득 해, 그것을 String에 변환 한 다음 (부분 문자열 등을 사용하여) 필터링 프로세스를 수행하십시오.
그러나 파일 크기가 크면 (약 100MB) JavaHeapSpace 예외가 발생합니다. 바이트의 []를 문자열로 변환하지 않으려 고 시도 할 때 내용의 길이가 String maxlength를 초과하기 때문에 이것이 예외라는 것을 알았습니다. 예외는 발생하지 않았습니다.
이제는 바이트 []를 여러 바이트 []로 분할하는 방법이 궁금합니다. 각각의 새로운 바이트 [] 만 포함되어 있습니다 하나 :
[날짜]
- 여기에 어떤 일이 일어나는지
그래서 우리는 로그에서 9 날짜가 한 달 이내에는 9 바이트로 분할 될 경우 [] . 스트링 마커는 [\\ d {2} - \\ d {2} - \\ d {4}]를 기반으로합니다. 문자열을 사용하는 경우 Regex를 사용하여 모든 마커를 찾을 수 있습니다. 그다.
하지만 먼저 문자열로 변환하지 않고 어떻게해야합니까? JavaHeapSpace를 던지면됩니다.
로깅 작업을 수행하는 응용 프로그램을 수정할 수 있습니까? 그렇다면 어떤 로깅 시스템이 사용합니까? – jhamon
고정 크기의 일부 버퍼에서 부분 구문 분석을 사용할 수 있습니까? 예를 들어 1024 바이트를 읽을 수 있고 다음 1024 바이트를 읽을 수 있습니다. – alexey28