0

ここを読み、JsonWriterとJsonReaderを使用して送受信する大きなオブジェクトを作成している間。送信された合計バイト数を追跡​​したかったのです。

4

3 に答える 3

2

あなたにそれを提供するものは何もありませJsonWriterJsonReader

実際にそれを行う唯一の方法は、現在/に渡しているReaderorをラップ/拡張し、読み取り/書き込み中のバイトを追跡することです。WriterJsonReaderJsonWriter

追加する編集:例として、次のようなことができます:

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もっとすっきりしますが...まあ、何ができますか。1 つのタイプWriter(たとえば、 a ) のみを使用することがわかっている場合は、それを拡張し、すべてのメソッドをオーバーライドして、コンストラクターを介して渡されたプライベートインスタンス の代わりにBufferedWriterメソッドを再呼び出しできます。thisrealWriter

于 2013-02-15T22:31:57.163 に答える
0

JsonReader から受信したバイト数を取得するデフォルトの方法はありません。私は以下に言及されている少しトリッキーなハックを書きました:

  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 ストリーム = mContext.openFileInput(FILE_NAME);
    InputStreamReader inputStreamReader = new InputStreamReader(ストリーム);

  4. これで、JsonReader の入力ストリーム (ストリーム) ができました

  5. JsonReader がこの入力ストリームを使用してデータを解析できるようにします

  6. 解析が完了したら、一時的に使用するために作成したファイルを削除します

    InputStream ストリーム = mContext.openFileInput(FILE_NAME);
    InputStreamReader inputStreamReader = new InputStreamReader(ストリーム);
    jsonReader = 新しい JsonReader(inputStreamReader);
    parseMyJSON(jsonReader);

    ファイル file = new File(mContext.getFilesDir(), FILE_NAME);
    file.delete();

于 2014-06-17T07:04:31.463 に答える
0

とんでもない。入力ストリームをある種のラッパーでラップしてバイトをカウントしても (例: apache の CountingInputStream)、JsonReader の内部バッファリングが原因で、結果は正しくありません。~300 バイトの長さの JSON を試しました。CountingInputStream は、毎回最大 4kb が読み取られたと報告しました。

于 2015-10-06T08:44:45.457 に答える