2011-04-20 3 views
0

Android에서 here으로 인용 된 것과 동일한 문제가 발생합니다."예상치 못한 파일 종료"예외가 발생하지 않도록 SaxParser의 스트림을 올바르게 종료합니다.

주어진 솔루션은 입력 스트림이 아닌 URI를 사용하는 것입니다.

필자는 API에서 알 수 있듯이 inputStream을 사용할 수 있다고 생각하지만 분명히 parse 메서드로 예외를 발생시키는 스트림에 문제가 있습니다. 모든 데이터가 스트림으로 전달되는지 확인할 수 있으며 SAXParseException은 -1을 반환하는 getColumnNumber 메서드를 사용할 수 있으므로 모든 데이터가 parse 메서드로 전달됨을 나타냅니다 (전체 스트림을 읽음을 나타냄). 그러나 구문 분석 메서드가 스트림의 끝으로 인식하여 "예기치 않은 파일 끝"을 발생시키는 것처럼 보입니다 (?)

입력으로 URI 대신 입력 스트림을 사용하는 방법을 조언 해 주실 수 있습니까? 구문 분석 메서드?

답변

1

이 문제가 있었지만 입력 스트림을 잘못된 인코딩 형식으로 받아들이고있었습니다. 먼저 올바른 인코딩 (바이트로 읽어 들이고 String (byte [], String) 생성자를 사용하여)을 인코딩 한 다음 SAX 파서를 통해 인코딩하려고하는지 확인하십시오.

그리고 Android에서 XML을 구문 분석하려는 경우 Simple library in Android을 사용하는 것이 더 나을 것입니다.

+0

"UTF8"이 가장 일반적으로 사용됩니까? 어느 것을 사용 했습니까? inputstreamreader가 허용하는 문자셋 목록을 찾고 있습니다. 이 링크가 정확한 출처가 될 것입니까? http://download.oracle.com/javase/1.4.2/docs/guide/intl/encoding.doc.html – giulio

+0

Thnx. 이런 식으로 인코딩을 추가했습니다. InputStream is = new ByteArrayInputStream (sData.getBytes ("UTF-8")); 그리고 효과가있었습니다. 그러나 필자는 bytestream에 나열된 내부 스키마를 생략해야했습니다. giulio

+0

도움이 된 것을 기쁘게 생각합니다. 이상한 문제이며, 제가 실종시킨 뭔가가 있다고 생각합니다. 어쨌든 난 원시 데이터를 파서에 전달하기 전에 인코딩 형식을 선택하는 것이 안전하다고 생각한다. –