【发布时间】:2015-05-13 10:26:08
【问题描述】:
在我的客户端-服务器应用程序中,我使用命令 (GET filename) 将文件下载到客户端。我已经使用read() 方法中的构建来读取文件。我的老师说实施这种read 方法不是一个很好的做法。原因是它不能告诉文件从服务器读取的准确程度,或者它无法下载动态(大)文件大小。但目前我看到它工作正常。由于我仍处于 Java 中级水平,因此我需要学习完成这项工作的最佳方法。如何在编码方面进行改进?那就是我想改进ClientSide中的while looping部分。
我已经粘贴了相关代码:
客户端:
............
............
if (request.startsWith("GET")) {
File file = new File(request.substring(4));
is = socket.getInputStream();
fos = new FileOutputStream(file);
byte[] buffer = new byte[socket.getReceiveBufferSize()];
int bytesReceived = 0;
while ((bytesReceived = is.read(buffer)) >=0) {
//while ((bytesReceived = is.read(buffer))>=buffer) {
fos.write(buffer, 0, bytesReceived);
}
request = "";
fos.close();
is.close();
}
.................
.................
服务器端:
.................
.................
else if (request.startsWith("GET")) {
System.out.println("");
String filename = request.substring(4);
File file = new File(System.getProperty("user.dir"));
File[] files = file.listFiles();
if (fileExists(files, filename)) {
file = new File(filename);
int fileSize = (int) file.length();
outputToClient.print("Status OK\r\n"
+ "Size " + fileSize + "KB" + "\r\n"
+ "\r\n"
+ "File " + filename + " Download was successfully\r\n");
outputToClient.flush();
// reading files
fis = new FileInputStream(file);
os = socket.getOutputStream();
byte[] buffer = new byte[2^7-1];
int bytesRead = 0;
while ((bytesRead = fis.read(buffer))!= -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
fis.close();
} else {
outputToClient.print("Status 400\r\n"
+ "File " + filename + " not found\r\n"
+ "\r\n");
outputToClient.flush();
}
}
outputToClient.flush();
}
.................
.................
【问题讨论】:
-
你在谷歌上搜索过这个问题吗?
-
兰吉特,是的。但没有找到任何相关信息。如果您有更好的建议,请帮助我,特别是在客户端的 while 循环中。
-
您知道 java 中如何处理客户端-服务器通信吗?
-
兰吉特,是的。我是。
-
你的代码对我来说看起来不错,但你知道你的老师为什么这么说......你问过原因吗
标签: java file-io while-loop client-server bufferedreader