2016-09-17 144 views
5

我上傳100kb到samba的圖片與我的平板電腦上的JCIFS共享時出現問題,需要大約10-20分鐘(之前我從1024 to 20971520更改了我的緩衝區花了近6個小時),但它沒有給出任何影響再增加它Android上傳到網絡驅動器(samba共享)性能問題

它不是連接問題,因爲我有ES File它上傳我的照片立即

private class MyCopy extends AsyncTask<String, String, String> { 

    String z = ""; 
    String username = "", password = "", servername = "", filestocopy = ""; 

    @Override 
    protected void onPreExecute() { 
      username = edtusername.getText().toString(); 
      password = edtpassword.getText().toString(); 
      servername = "smb://" + edtservername.getText().toString(); 
      filestocopy = editdir.getText().toString(); 
     } 

     protected String doInBackground(String... params) { 
    //   String buffer; 
    //   buffer = setingPreferences.getString("buffer", ""); 
      File file = new File(filestocopy); 
      String filename = file.getName(); 

      NtlmPasswordAuthentication auth1 = new NtlmPasswordAuthentication(
        servername, username, password); 

      try { 

       SmbFile sfile = new SmbFile(servername + "/" + filename, auth1); 
       if (!sfile.exists()) 
        sfile.createNewFile(); 
       sfile.connect(); 

       InputStream in = new FileInputStream(file); 

       SmbFileOutputStream sfos = new SmbFileOutputStream(sfile); 

       byte[] buf = new byte[20971520]; //(parseInt(buffer)) 
       int len; 
       while ((len = in.read(buf)) > 0){ 
        sfos.write(buf, 0, len); 

       } 
       in.close(); 
       sfos.close(); 

       z = "File copied successfully"; 
      } catch (Exception ex) { 

       z = z + " " + ex.getMessage().toString(); 
      } 

      return z; 
     } 
    } 
+0

您是否嘗試過在J2SE環境中使用JCIFS來檢查它是Android問題還是JCIFS問題?這個庫看起來很舊(最後一次真正的更新2011)... – Robert

回答

0

緩衝區的大小不應該測試它沒有明顯的差異,但絕對不應該是20M。改用類似4k的東西。

您確定這是需要這麼長時間的實際文件傳輸嗎?沒有理由100k應該最多花幾秒鐘時間。您是否嘗試過在每個步驟之間放置日誌語句,包括身份驗證呼叫之前和之後的createNewFile()connect()以檢查這些是否是瓶頸?

而且,我相信你應該複製字節,而讀取長度爲>= 0,而不是嚴格> 0,因爲-1信號流的結束,不是0

0

你嘗試

new SmbFile("username:[email protected]/")

而不是使用NTLM?它也可以是一個DNS的問題,所以不要嘗試

jcifs.Config.setProperty("resolveOrder", "DNS");

如果沒有工作,你可能想嘗試BufferedOutputStreamSmbFileOutputStream

+0

'新的SmbFile(「用戶名:密碼@服務器/」)'給予帳戶目前禁用 'jcifs.Config.setProperty(「resolveOrder」,「DNS 「);'並沒有修復它012,如何使用BufferedOutputStream和SmbFileOutputStream,因爲它不能在這裏應用'SmbFileOutputStream sfos = new BufferedOutputStream(sfile);'和這裏不兼容'BufferedOutputStream sfos = new SmbFileOutputStream(sfile);' –

相關問題