web_...@mysmart.jp
unread,Jul 10, 2014, 7:42:08 PM7/10/14Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to android-g...@googlegroups.com
おはようございます。odaです。
早速ですが、表題の通りJSchを使い、SFTPクライアントを作成しております。
DL処理を作っているところなのですが、DL速度が悪く使い物にならない状態
で困っております。
お忙しい所恐縮ですが、アドバイス頂けませんでしょうか?
以下はダウンロード部分を抜粋したソースです。
現象としては、
BufferedInputStreamを使用し、読み込んでは書き込むという処理をいれてます
が、一度データを読み込んでから、次読み込むまでに数秒かかり、
さらに、一度に読み込むデータは32kしか読み込みません。
2M程度のファイルをDLすると、10分前後かかります
(ネットワーク環境にもよると思いますが)
BufferedInputStreamを使わず、get()で行った場合ですが、BufferedInputStream
よりも若干遅いです。
ちなみに、
orionライブラリを使用したところ、読み込む間の時間もなく、2Mのファイルを
1分半ぐらいでDLすることができますので、JSchがボトルネックになっているの
ではないかと考えております。
また、ESエクスプローラーでSFTPで2MのファイルをDLしますと、10数秒でDLでき
ました。
そこで、私がやりたいことは、
1)JSchまたはそれ以外のライブラリを使い、ESエクスプローラーと同等の
処理速度をだしたい。
2)一度に読み込むバッファを増やしたい
(これができれば(1)に近づけるかと)
このいずれかです。
プログラムに問題があるかもしれませんので、そちらも併せてご教授頂けますと
助かります。
-------------------------------------------------------------------
FileOutputStream os = null;
os = new FileOutputStream(localFile);
byte[] buffer = new byte[BUFFER_SIZE];
BufferedInputStream bis = new BufferedInputStream(sftpChannel.get(filename),BUFFER_SIZE);
BufferedOutputStream bos = new BufferedOutputStream(os,BUFFER_SIZE);
int readCount = 0;
int allcnt = 0;
while ((readCount = bis.read(buffer,0,buffer.length)) > 0) {
allcnt += readCount;
Log.d("sftp", "sftp get data size:" + readCount + " all:"+allcnt);
bos.write(buffer, 0, readCount);
}
bis.close();
bos.flush();
bos.close();
-------------------------------------------------------------------
以上、よろしくお願いいたします。
--
oda