2013-02-14 2 views

답변

2

JsonWriter 또는 JsonReader에는 아무것도 들어 있지 않습니다. 정말

는 읽기/IN/OUT 기록되는/포장 JsonReader/ JsonWriterReader 또는 Writer 현재 전달하는을 확장하고 바이트를 추적하는 것입니다 할 수있는 유일한 방법입니다.

편집 추가 : 당신이 뭔가 할 수있는 예를 들어 : 당신이 무엇을 할 수 Writer가 인터페이스하지만 ... MEH 있다면 그것은 많은 청소기 것

class MyWriterWrapper extends Writer { 

    private Writer realWriter; 
    private int bytesWritten; 

    public MyWriterWrapper(Writer realWriter) { 
     super(); 
     this.realWriter = realWriter; 
    } 

    public int getBytesWritten() { 
     return bytesWritten; 
    } 

    @Override 
    public Writer append(CharSequence csq) throws IOException { 
     realWriter.append(csq); 
     bytesWritten += csq.length(); 
     return this; 
    } 

    // Implement/Override all other Writer methods the same way 

} 

을. 한 유형의 Writer (예 : BufferedWriter) 유형 만 사용한다면 확장 할 수 있으므로 모든 메소드를 무시하고 this의 메소드를 생성자를 통해 전달 된 realWriter 인스턴스 대신 다시 호출하십시오.

+0

이것은 내 생각이었습니다. 이 기능이있는 gson 복제본이 있으면 좋겠다. 내가 멀리까지 가면 하나가 될 것이다. – Erik

+0

이것은 독자가 아니라 작가에게만 적용됩니다. –

0

JsonReader에서받은 바이트 수를 가져 오는 기본 방법은 없습니다. InputStream로부터

  1. 읽기 바이트와 (내부 저장 파일

    while ((count = inputStream.read(data)) != -1) { 
           total += count; 
           final long downloadedLength = total; 
           final long totalLength = lengthOfData; 
          **// Here you get the size of bytes received** 
           outStream.write(data, 0, count); 
          } 
    
  2. 닫기

    모든 열린 스트림에 기록 : 나는 울부 짖는 언급 약간 까다로운 해킹을 작성했습니다 위에서 생성 된 입출력 스트림)

  3. 새로 생성 된 파일

    의 입력 스트림 열기

    InputStream stream = mContext.openFileInput (FILE_NAME);
    InputStreamReader inputStreamReader = 새로운 InputStreamReader (스트림);

  4. 이제

  5. 하자 JsonReader가 임시 사용

    에 대해 생성 된 파일을 삭제

  6. 완료 구문 분석 한 후 분석 데이터에 대한이의 InputStream를 사용하는 JsonReader

    위한 InputStream (스트림)가

    InputStream stream = mContext.openFileInput (FILE_NAME);
    InputStreamReader inputStreamReader = 새로운 InputStreamReader (스트림);
    jsonReader = new JsonReader (inputStreamReader);
    parseMyJSON (jsonReader);

    파일 file = 새 파일 (mContext.getFilesDir(), FILE_NAME);
    파일지우다();

0

도중입니다. 입력 스트림을 일종의 래퍼 (예 : 아파치의 CountingInputStream)로 감싸더라도 JsonReader의 내부 버퍼링으로 인해 결과가 올바르지 않습니다. ~ 300 바이트 길이의 JSON을 실험했습니다. CountingInputStream은 매번 ~ 4kb가 읽혔다 고보고했습니다.

관련 문제