Java 如何计算下载的文件大小和要下载的总数据
如何使用socket计算下载的数据量和要下载的总数据量 例如500kb/95000kb…95000kb/95000kb 这里我包括了我的代码供您参考Java 如何计算下载的文件大小和要下载的总数据,java,sockets,stream,file-transfer,Java,Sockets,Stream,File Transfer,如何使用socket计算下载的数据量和要下载的总数据量 例如500kb/95000kb…95000kb/95000kb 这里我包括了我的代码供您参考 private static void updateFile() { Socket socket = null; PrintWriter writer = null; BufferedInputStream inStream = null; BufferedOutputStream outStream = null;
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();}
}
}
}
请提供建议以实现此目标,并提前感谢 套接字通常不知道接收数据的大小。套接字绑定到TCP连接,TCP不提供任何有关数据大小的信息。它是应用程序协议的任务,在您的示例中是HTTP HTTP表示
内容长度
标题中的数据大小。HTTP响应如下所示:
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 13
Connection: keep-alive
<html></html>
HTTP/1.1200正常
内容类型:text/html;字符集=utf-8
内容长度:13
连接:保持活力
HTML响应包含标题和正文。正文与标题之间用换行符隔开。内容长度
标题包含正文的大小(以字节为单位)
因此,您可以解析头并查找长度,也可以使用现有类,如
java.net.HttpURLConnection
,这是不可能直接实现的。如果你尝试下载一个文件。我建议您使用HttpURLConnection之类的类,并使用:connection.getContentLength()来了解要下载的数据的总大小。使用套接字是可能的,但您首先需要内容的标题并获取“内容长度”的值示例。HTTP中的行终止符是\r\n
,而不是println()
可能提供的任何值。当有内置支持和任何数量的第三方客户端时,不要自己实现HTTP。这不是小事。参见RFC 2616了解原因。