gpt4 book ai didi

java - 如何计算下载的文件大小和下载的总数据量

转载 作者:行者123 更新时间:2023-11-30 07:01:13 25 4
gpt4 key购买 nike

如何使用socket计算下载的数据量和要下载的总数据量。

E.G. 500kb/95000kb...95000kb/95000kb

这里我包含了我的代码供您引用。

private static void updateFile() {
Socket socket = null;
PrintWriter writer = null;
BufferedInputStream inStream = null;
BufferedOutputStream outStream = null;

try {
String serverName = System.getProperty("server.name");

socket = new Socket(serverName, 80);
writer = new PrintWriter(socket.getOutputStream(), true);
inStream = new BufferedInputStream(socket.getInputStream());
outStream = new BufferedOutputStream(new FileOutputStream(new File("XXX.txt")));

// send an HTTP request
System.out.println("Sending HTTP request to " + serverName);

writer.println("GET /server/source/path/XXX.txt HTTP/1.1");
writer.println("Host: " + serverName + ":80");
writer.println("Connection: Close");
writer.println();
writer.println();

// process response
int len = 0;
byte[] bBuf = new byte[8096];
int count = 0;

while ((len = inStream.read(bBuf)) > 0) {
outStream.write(bBuf, 0, len);
count += len;
}
}
catch (Exception e) {
System.out.println("Error in update(): " + e);
throw new RuntimeException(e.toString());
}
finally {
if (writer != null) {
writer.close();
}
if (outStream != null) {
try { outStream.flush(); outStream.close(); } catch (IOException ignored) {ignored.printStackTrace();}
}
if (inStream != null) {
try { inStream.close(); } catch (IOException ignored) {ignored.printStackTrace();}
}
if (socket != null) {
try { socket.close(); } catch (IOException ignored) {ignored.printStackTrace();}
}
}
}

请提供实现此目标的建议并提前致谢。

最佳答案

套接字一般不知道接收数据的大小。套接字绑定(bind)到 TCP 连接,并且 TCP 不提供有关数据大小的任何信息。这是应用程序协议(protocol)的任务,在您的示例中是 HTTP。

HTTP 指示 Content-Length header 中的数据大小。 HTTP 响应如下所示:

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 13
Connection: keep-alive

<html></html>

HTML 响应包含 header 和正文。正文与标题之间用换行符分隔。 Content-Length header 包含正文的大小(以字节为单位)。

因此,您可以解析 header 并查找长度,也可以使用现有的类,例如 java.net.HttpURLConnection

关于java - 如何计算下载的文件大小和下载的总数据量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40889474/

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