我在使用java的桌面应用程序中工作。在我的应用程序中,我必须执行速度测试,它将显示文件上传和下载速度。
对于上传测试,我将一个小测试文件上传到FTP服务器,并根据我计算文件上传速度所花费的时间。同样我正在下载测试文件格式服务器并计算下载速度。
但是我得到的结果与实际的FTP文件上传和下载速度不匹配。似乎建立与FTP服务器的连接正在增加时间,因此我计算的结果速度较小。
这是我正在使用的文件上传代码:
public int getTransferRate(File filename)
{
int trRate = 0;
try {
OutputStream fout = null;
InputStream bin = null;
connect(ftpUser,ftpPass,ftpServer);
ftp.setFileType(FTPSClient.BINARY_FILE_TYPE);
ftp.enterLocalPassiveMode();
fout = ftp.storeFileStream("testuploadfile");
bin = new FileInputStream(filename);
byte[] b = new byte[8192];
int bytesRead = 0;
long startTime = System.currentTimeMillis();
long endTime = 0;
while ((bytesRead = bin.read(b)) != -1) {
fout.write(b, 0, bytesRead);
bytesUploadedSet += bytesRead;
}
endTime = System.currentTimeMillis();
trRate = (int) ((float) bytesUploadedSet / (endTime - startTime));
} catch (IOException ex) {
Logger.getLogger(FTPFileStorageService.class.getName()).log(Level.SEVERE, null, ex);
}
return trRate;
}
你能否建议任何链接或某种方式来获得最近的上传和下载速度。
我感谢您提出的所有宝贵意见。
答案 0 :(得分:1)
建立连接后是否无法启动计时器?
如果没有,那么对于快速部分解决方案,增加测试文件的大小,它越大,连接开销就越小。
如果你需要更准确,那么我会推荐给有更多hava经验的人......
答案 1 :(得分:1)
首先,filezilla可能使用的本机代码比您使用的代码更快。
进行测试,建立连接并尝试上传许多文件,大约20个左右......这应该可以很好地了解结果..通常,也可以将输出记录到逗号分隔的测试文件或其他东西,你可以后来导入到excel并进行分析。如果你想进行一些硬核性能测试,你可以使用像JMeter这样的东西。
在任何类型的性能测试中,样本量较大(样本结果很多)可以得到最准确的结果。
答案 2 :(得分:0)
您可以使用更简单的协议,例如HTTP吗?
设置FTP传输可能很繁琐:需要建立单独的控制和数据连接,并且两个端点需要就是否使用被动或主动模式来绕过防火墙和NAT达成一致。这个过程可能只涉及尝试其中一个选项(例如活动)并等待成功或超时,这可能会扭曲您的测量结果。