Socketでの通信で、ダウンロードの進捗をプログレスで出したい時の方法です。
読み込みのループ処理で、読み込みバイト数をカウントする方法もありますが、
ObjectInputStreamのreadObjectでは使えないので。。。
結論から言うと、CountingInputStreamを使用します。
CountingInputStreamは、org.apache.commons.ioパッケージにありますので、
この辺から入手してください。
http://commons.apache.org/io/
使い方は簡単です。
例えば、ObjectInputStreamの読み込み状況を知りたいときは、以下のように書きます。
private CountingInputStream cis = null;
.
.
.
public void readObjectBySocket(InetAddress address, int port){
try{
Socket sock = new Socket(address,port);
cis = new CountingInputStream(sock.getInputStream());
ObjectInputStream inStream = new ObjectInputStream(cis);
receiveObject = inStream.readObject();
inStream.close();
cis.close();
sock.close();
}
catch(Exception e){
e.printStackTrace();
}
}
//cisからダウンロード完了したバイトサイズを取得するには、getByteCountを使用します。
public long getCount(){
if(cis==null){
return 0;
}
return cis.getByteCount();
}
こんな感じ。例外とかは適当です。
ただし、readObject()で受信完了待ちになるので、
別スレッドなどから
cisにアクセスしましょう。
3.0からは、通信処理は、AsyncTaskでやる必要があるので、ちょうどいいです。
多分これで取得できるはず。。。
0 件のコメント:
コメントを投稿