2009-07-27 3 views
0

대규모 XML 파일의 루트 요소에 특성을 추가하는 가장 빠른 방법은 무엇입니까? 이러한 파일은 너무 커서 메모리로 읽을 수 없으므로 가능한 한 많은 I/O 패널티를 피하고 싶습니다.Java에서 방대한 XML 파일의 시작 부분에 속성을 추가하는 가장 효율적인 방법은 무엇입니까?

+0

이 새로 정의 된 AT & T 또는 옵션으로 정의하지만 채워지지 AT & T는 무엇입니까? – akf

+0

새로 정의 된 속성 - 특히 JAXB가 객체를 비 정렬화할 수 있도록 namespace 속성. – Brian

+0

네임 스페이스 선언을 특성으로 취급하는 데주의하십시오. 구문 분석기는 특수 처리를 제공하며 해당 정보를 특성으로 API에 공개 할 수 없습니다. – skaffman

답변

5

처음부터 또는 근처에 텍스트를 삽입하는 경우 전체 파일을 다시 작성해야합니까? 한 번에 모두 메모리에 저장하지 않으려면 SAX 파서가 버퍼 입력 (InputStream을 통해)에 적용 가능해야합니다.

전체 파일을 다시 작성해야하지만 메모리에 한 번에 메모리가있는 것은 아닙니다. 기본적으로 파일을 파싱하고 SAX 이벤트를 듣고 해당 이벤트의 새 파일을 작성합니다. 그런 다음 SAX 파서는 속성을 추가하는 올바른 상황을 수신합니다.

+0

우수 답변 : –

0

그것은 (심지어 ... 어쩌면 당신은 시스템 레벨에서 파일을 조정 한 경우이 작업을 수행 할 수 있다고 생각하지 않지만) 자바에서 파일을 다시 작성하지 사실상 불가능하다 - 그래서 당신의 질문은 무엇된다 파일을 다시 쓰는 가장 효율적인 방법은 무엇입니까?

가능한 경우 모든 XML 파서를 피하고 자신의 의견을 쓰십시오. 이를 위해서는이 새로운 속성이 필요한 파일의 위치를 ​​쉽게 식별 할 수 있어야합니다. 문자열과 일치하도록 문자열을 만들 수있는 경우 한 번에 조금씩 읽을 수 있고 삽입 지점을 검색하여 추가 데이터를 삽입 한 다음 나머지 부분을 계속 복사 할 수 있습니다.

관련 문제