当我从平板电脑上将100kb
的图片从JCIFS上传到samba共享时出现问题,大约需要10-20分钟(在我从1024 to 20971520
更改缓冲区之前,它花费了大约6分钟小时)但它不再产生任何影响来增加它
这不是连接问题,因为我用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 :(得分:0)
缓冲区大小不应该有明显的差异,但绝对不应该是20M。使用像4k这样的东西。
您确定实际的文件传输花了这么长时间吗?没有理由100k最多需要花费几秒钟的时间。您是否尝试在每个步骤之间放置日志语句,包括身份验证调用之前和之后createNewFile()
和connect()
,以检查这些是否是瓶颈?
此外,我相信你应该在读取长度为>= 0
而不是严格> 0
时复制字节,因为-1表示流的结尾,而不是0。
答案 1 :(得分:0)
你试过吗
new SmbFile("username:password@server/")
而不是使用NTLM?它也可能是DNS问题,所以请尝试
jcifs.Config.setProperty("resolveOrder", "DNS");
如果两者都不起作用,您可能希望BufferedOutputStream
尝试使用SmbFileOutputStream
。