0

Gson ライブラリのストリーミング実装を見てきました。しかし、配列の最初の要素を取得するために次のようにするのが良い方法であるかどうかは判断できません。URL はInputStream、Json 配列を含む を返します。

JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
reader.beginArray();
Message message = new gson().fromJson(reader, Message.class);
reader.endArray(); // this line
reader.close();

私の質問は、コメントが横にある行にあります。最初の要素だけを取得したい場合は、そうする必要がありますか?

ここで、コードの効率について知りたいことに注意してください。このコードは、gson ストリーミングの例から直接コピーされています [状況を正しく説明するためにいくつかの変更が加えられています]。

実際の配列は非常に大きいです。そのため、配列全体を取得してから要素を取得するのを待つことはできません。そのため、最初の要素を取得したらすぐにプロセスを中断し、ストリームを閉じたいと考えています。

また、より良いアプローチがあればお勧めします。

4

1 に答える 1

2

ここで、コードの効率について知りたいことに注意してください

それでは、コードを見てください:) JsonReaderのソース

それはあなたが期待することをほとんど行います。提供されたものを使用しInputStreamReader、操作を実行するために必要なもののみを読み取ります (あなたの場合、JSON 配列から最初のオブジェクトを取得します)。

ただし...呼び出すと...その配列endArray()の終了が見つかるまでストリームから読み取ります。]あなたは実際にはそれを気にしませんし、ネットワークからすべてのデータを読み取るのに時間を費やしたくありません。電話するだけclose()です。

(したがって、基になるストリーム) を閉じているJsonReaderため、これで十分です。基になるストリームから必要なデータのみを読み取り、それを閉じました。

コメントから編集: 次のようにして、ケースを整理整頓できます。

public Message getFirstMessageFromArray(JsonReader reader) {
    reader.beginArray();
    return getMessageFromJson(reader);
}

public Message getMessageFromJson(JsonReader reader) {
    return new gson().fromJson(reader, Message.class);
}

そして、あなたがそれを使いたいとき:

JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
Message message = getFirstMessageFromArray(reader);
reader.close();

また

JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
Message message = getMessageFromJson(reader);
reader.close();
于 2013-06-28T14:31:23.770 に答える