JSchを使ったSFTPについて

235 views
Skip to first unread message

web_...@mysmart.jp

unread,
Jul 10, 2014, 7:42:08 PM7/10/14
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
Reply all
Reply to author
Forward
0 new messages