我正在用JAVA构建我的HTTP WEB SERVER。
如果客户端请求任何文件并且该文件位于服务器中的该位置,则服务器将该文件提供给客户端。我也做了这个代码,它工作正常。
显示上述功能的代码部分,
File targ = [CONTAINS ONE FILE]
PrintStream ps;
InputStream is = new FileInputStream(targ.getAbsolutePath());
while ((n = is.read(buf)) > 0) {
System.out.println(n);
ps.write(buf, 0, n);
}
但是现在为了优化我的代码,我用下面的代码替换了这段代码,
InputStream is = null;
BufferedReader reader = null;
String output = null;
is = new FileInputStream(targ.getAbsolutePath());
reader = new BufferedReader(new InputStreamReader(is));
while( (output = reader.readLine()) != null) {
System.out.println("new line");
//System.out.println(output);
ps.print(output);
}
但它有时会显示一个错误Why code shows "Error 354 (net::ERR_CONTENT_LENGTH_MISMATCH): The server unexpectedly closed the connection."
。我不明白,为什么它显示这个错误。这个错误很奇怪,因为服务器显示200
代码,这意味着该文件在那里。
请帮帮我。
编辑编号 1
char[] buffer = new char[1024*16];
int k = reader.read(buffer);
System.out.println("size : " + k);
do {
System.out.println("\tsize is : " + k);
//System.out.println(output);
ps.println(buffer);
}while( (k = reader.read(buffer)) != -1 );
这会打印所有文件,但对于较大的文件,它会显示不可读的字符。
它显示以下输出 (客户端浏览器的快照)