2013-08-22 2 views
2

트리 파서 vs 스트림 파서에 대한 설명을 찾고 있습니다.트리 파서 대 스트림 파서

내가 JSON 빌드 파인더를 android에서 연구하고있는 것은 트리 파서이며 Jackson Json 파서는 스트림 파서입니다. 또한, 안드로이드의 XML 풀 파서는 스트림 파서입니다.

제 질문은 트리 파서 란 무엇이며 스트림과 트리 파서의 차이점을 설명 할 수 있습니까? Google I/O 발표자가 말한 트리 파서는 배터리 수명을 훨씬 늘리고 스트림 파서 대신 사용하지 않는 것이 좋습니다.

업데이트 : 트리 파서가 Dom 파서와 같은가요? 나는 조건이 같은 것을 의미합니까?

+1

: 트리 파서는 전체 데이터를로드하고 파싱합니다. 스트림 파서는 청크로 전달하고 전달합니다 (트리 파서에서 모든 요소에 액세스 할 수 있습니다 - 현재 스트림에만 해당). ... ' 배터리 수명과 어떻게 연결되어 있는지 알지만 스트림 파서는 메모리를 덜 먹는다. – Selvin

+0

트리 파서는 Dom 파서와 같은가요? 나는 조건이 같은 것을 의미합니까? – j2emanue

답변

1

트리 파서는 텍스트의 전체 구문 분석을 반환합니다. 따라서 전체 텍스트가 파싱 될 때까지 답변을 제공하지 않습니다.

반면에 스트림 구문 분석기는 텍스트를 처리하는 동안 정보를 반환합니다. 그렇게한다면 나무를 만드는 것은 당신에게 달려 있습니다. 알고리즘에서이 차이점은 일괄 또는 오프라인 알고리즘 (트리 파싱) 대 온라인 알고리즘 (스트림 파서)의 차이입니다.

What's the difference between an on-line and off-line algorithm?을 참조하십시오.

그래서 왜 다른 하나를 선택하겠습니까? Google I/O 발표자는 배터리 수명을 언급했습니다. 그러나 이것은 전체 텍스트에 대해 트리를 저장하는 데 더 많은 메모리가 필요하고 전체 텍스트를 읽는 데 더 많은 처리 시간이 필요합니다 (스트림 파서가 일찍 종료 될 수 있다고 가정 할 때).

DOM이나 XML 문서에서 첫 번째 태그를 찾는 것과 같이 텍스트의 작은 부분을 사용하는 특정 정보를 찾고 있다면 스트림 방식이 좋습니다.

모든 태그 및 문서에 대한 몇 가지 개념적 통과라고 생각할 수있는 여러 가지 태그가 있거나 텍스트/트리로 다시 돌아올 필요가있는 경우 다시 한 번 구문 분석을 한 번 해보고 텍스트를 여러 번 통과시키는 것보다는 결과로 나오는 트리에서 벗어나기를 원할 수 있습니다.

마찬가지로, 필요한 정보의 종류가 나무와 같은 문제에 대해 생각하면 가장 좋습니다. 자식 노드, 형제 노드 및/또는 조상 노드에서 정보를 가져 오거나 전달하면 트리 접근법. 하지만 ...

이론적으로 이론을 따르면 스트리밍 파서를 트리 파서로 만들 수 있습니다. 그리고 그것은 여러분이 작성해야하는 추가 코드입니다.

스트림 파서와 트리 파서의 차이점은 파이썬 반복자/생성자 대 목록 (Ruby 열거 형 대 배열)의 차이점과 같습니다.

간단히 말하면