gpt4 book ai didi

Android上传到网络驱动器(samba共享)性能问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:22:47 26 4
gpt4 key购买 nike

当我从我的平板电脑上传一张 100kb 的图片到 JCIFS 的 samba 共享时出现问题,大约需要 10-20 分钟(在我将缓冲区从 1024 更改为 20971520 之前 花了将近 6 个小时)但增加它不再产生任何效果

这不是连接问题,因为我已经用 ES 文件 测试了它,它立即上传了我的图片

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;
}
}

最佳答案

缓冲区大小应该不会有明显差异,但绝对不应该是 20M。请改用 4k 之类的东西。

您确定真正的文件传输花费了这么长时间吗?没有理由 100k 最多需要几秒钟。您是否尝试过在每个步骤之间放置日志语句,包括身份验证调用、createNewFile()connect() 之前和之后,以检查这些是否是瓶颈?

此外,我认为您应该在读取长度为 >= 0 而不是严格的 > 0 时复制字节,因为 -1 表示流结束,不是 0。

关于Android上传到网络驱动器(samba共享)性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39548094/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com