2016-09-17 3 views
5

У меня проблема при загрузке изображения 100kb на долю samba с JCIFS с моего планшета, это занимает около 10-20 минут (до того, как я изменил свой буфер с 1024 to 20971520 Потребовалось почти 6 часов), но это не дает никакого эффекта больше увеличить егоЗагрузка ОС Android на общий сетевой ресурс (samba share)

это не проблема соединения, как я испытал это с 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

Вы пытались использовать JCIFS в среде J2SE, чтобы проверить, является ли это проблемой для Android или может быть JCIFS - это просто проблема? Эта библиотека кажется довольно старой (последнее реальное обновление 2011) ... – Robert

ответ

0

размер буфера не должен 't сделать заметную разницу, но это определенно не должно быть 20M. Вместо этого используйте что-то вроде 4k.

Вы уверены, что это фактическая передача файлов, которая занимает так много времени? Нет причин, по которым 100k должно занимать больше нескольких секунд. Пробовали ли вы ставить записи журнала между каждым шагом, включая до и после вызовов аутентификации, createNewFile() и connect(), чтобы проверить, являются ли эти узкие места?

Кроме того, я считаю, вы должны быть копируя байт, а длина считывания >= 0 вместо строго > 0, поскольку -1 означает конец потока, а не 0.

0

Пробовали ли вы

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

вместо использования NTLM? Она также может быть проблемой DNS, поэтому попробуйте

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

Если ни работы, вы можете попробовать BufferedOutputStream с SmbFileOutputStream.

+0

'new SmbFile (« имя пользователя: пароль @ server/»)' предоставление учетной записи в настоящее время отключено 'jcifs.Config.setProperty (" resolveOrder "," DNS ");' не исправил его либо , как использовать BufferedOutputStream с SmbFileOutputStream, так как он не может быть применен здесь 'SmbFileOutputStream sfos = new BufferedOutputStream (sfile);' и несовместим здесь 'BufferedOutputStream sfos = new SmbFileOutputStream (sfile);' –

Смежные вопросы