internal.http.HttpResponse#asJSONObject()/asJSONArray()の無駄

24 views
Skip to first unread message

Kazkun

unread,
Mar 6, 2010, 3:44:47 AM3/6/10
to twitt...@googlegroups.com
はじめまして。Kazkunと申します。

twitter4jのソースコードで、JSONをobjectに変換している部分にて、無駄と思
われる箇所を見つけましたので、投稿しました。

public JSONObject asJSONObject() throws TwitterException {
try {
// return new JSONObject(asString()); ★ここ
return new JSONObject(new JSONTokener(asReader()));
} catch (JSONException jsone) {
throw new TwitterException(jsone.getMessage() + ":" +
this.responseAsString, jsone);
}
}

public JSONArray asJSONArray() throws TwitterException {
try {
// return new JSONArray(asString()); ★ここ
return new JSONArray(new JSONTokener(asReader()));
} catch (JSONException jsone) {
throw new TwitterException(jsone.getMessage() + ":" +
this.responseAsString, jsone);
}
}

確かにオリジナルの方法が簡単ですが、一度文字列を生成してから処理すること
で、かなりヒープを消費します。

なおかつその先の処理ではStringReaderを生成して処理していますので、全くの
無駄と言えそうです。

試したところ、処理速度も向上しました。

本来ならばtwitter4jのコミッタになって、リポジトリに直接postすればいいの
でしょうが、まだtwitter4jの何たるかも判ってないのでMLにて失礼します。

# xAuth実装期待してます

--------------------------------------------
石垣和人 Twitter @Kazkun
Ishigaki, KazuHITO kazku...@gmail.com
--------------------------------------------

Yusuke Yamamoto

unread,
Mar 9, 2010, 9:00:04 AM3/9/10
to twitt...@googlegroups.com
こんばんは。

投稿が管理対象となっていたのに気が付かず3日遅れの配信となってしまいました。ごめんなさい。

ご指摘ありがとうございます。

asString() を呼び出しているのは確かデバッグをしやすくするため
だった気がするのですが・・殆どの場合は仰る通りストリームで処理
した方がパフォーマンス/メモリフットプリント上良いですね。
すぐに修正いたします。
http://twitter4j.org/jira/browse/TFJ-319

> 本来ならばtwitter4jのコミッタになって、リポジトリに直接postすればいいの
> でしょうが、まだtwitter4jの何たるかも判ってないのでMLにて失礼します。
github で pull リクエストを送って頂くとマージが楽です。
patch をメーリングリストに投げて頂いても結構です。

以上よろしくお願いいたします。
--
Yusuke Yamamoto
yus...@mac.com

このメールは: [x] ブログ/Twitterへ転載可能 [ ] 私信
Twitter でフォロー : http://twitter.com/yusukey
blogを購読: http://yusuke.homeip.net/diary/

> --
> Twitter4J の最新情報をフォロー: http://twitter.com/t4j_news
> 現在開発中のバージョン: 2.1.1
> http://twitter4j.org/jira/secure/IssueNavigator.jspa?requestId=10030
> バグトラッキング: http://twitter4j.org/jira/browse/TFJ
>
> このメールは次の Google グループの参加者に送られています: Twitter4J J
> このグループにメールで投稿: twitt...@googlegroups.com
> このグループから退会する: twitter4j-j...@googlegroups.com
> その他のオプションについては、次の URL からグループにアクセスしてくださ
> い。 http://groups.google.com/group/twitter4j-j?hl=ja

Yusuke Yamamoto

unread,
Mar 9, 2010, 9:22:53 AM3/9/10
to twitt...@googlegroups.com
修正しました。
http://github.com/yusuke/twitter4j/commit/0a7b28d920f9dc407bd41ca7b3d91f7f74a54238
& 全テスト通りました!
http://twitter4j.org/hudson/job/Twitter4J/598/

こちらからダウンロードしていただけます。
http://twitter4j.org/en/index.html#download
http://twitter4j.org/maven2/org/twitter4j/twitter4j-core/2.1.1-SNAPSHOT/

以上よろしくお願いいたします。
--
Yusuke Yamamoto
yus...@mac.com

このメールは: [x] ブログ/Twitterへ転載可能 [ ] 私信
Twitter でフォロー : http://twitter.com/yusukey
blogを購読: http://yusuke.homeip.net/diary/

Yusuke Yamamoto

unread,
Mar 9, 2010, 9:27:50 AM3/9/10
to twitt...@googlegroups.com
こんばんは。度々失礼いたします。山本です。

>> # xAuth実装期待してます
実は xauth はすでにスナップショットビルドで対応しています。
ただ、現在アクセス権を申請中の段階でテストケースがありません。
「アクセス件が無ければ401が返る」、ことだけテストしています。
http://github.com/yusuke/twitter4j/blob/master/twitter4j-core/src/test/java/twitter4j/http/OAuthTest.java#L399

もしアクセス権をお持ちでしたらお試し頂ければ幸いです。
以下のような twitter4j.properties / コードで動く・・・と思います。
・twitter4j.properties
oauth.consumerKey=****
oauth.consumerSecret=****
・コード
Twitter twitter = new TwitterFactory().getInstance(screenName, password);
twitter.getOAuthAccessToken();
--------
--
Yusuke Yamamoto
yus...@mac.com

このメールは: [x] ブログ/Twitterへ転載可能 [ ] 私信
Twitter でフォロー : http://twitter.com/yusukey

blogを購読: http://samuraism.jp/diary/

On Mar 6, 2010, at 5:44 PM, Kazkun wrote:

Kazkun

unread,
Mar 10, 2010, 5:04:11 AM3/10/10
to twitt...@googlegroups.com
Kazkunです。

> 実は xauth はすでにスナップショットビルドで対応しています。

svnで取得していたため、最新ビルドが取得できておらず、密かに
「対応してないじゃん」と思っておりました。gitにて取得、なるほど
と理解しました。

さて、xAuthには申請が必要だったのですね。私も先程申請しました。
ということで401が返ってくることだけは確認できました。
利用可能になり次第テストしてみようと思っています。

--------------------------------------------
石垣和人 Twitter @Kazkun
Ishigaki, KazuHITO kazku...@gmail.com
--------------------------------------------

2010年3月9日23:27 Yusuke Yamamoto <yus...@mac.com>:

Yusuke Yamamoto

unread,
Mar 10, 2010, 12:59:53 PM3/10/10
to twitt...@googlegroups.com
お手数おかけしました。
git のパフォーマンスの良さが快適で最近 svn の方へ反映させていませんでした。
今後は git 一本に絞ろうと思っており、Web サイトの方では svn リポジトリへの
リンクは削除してあるのですが、リポジトリはそのままにしてありました。
すっからかんにして移行を促す書き置きをしておきました。
http://yusuke.homeip.net/svn/twitter4j/trunk/

私も近日中に xAuth のアクセス権を貰えそうです。まともなテストケースが
通りましたらアップデートいたしますね。
--
Yusuke Yamamoto
yus...@mac.com

このメールは: [ ] ブログ/Twitterへ転載可能 [x] 私信


Twitter でフォロー : http://twitter.com/yusukey
blogを購読: http://samuraism.jp/diary/

Reply all
Reply to author
Forward
0 new messages