我有一些代码,它将输入流从套接字写入带有缓冲重新读取器的文件。这可行,但由于某种原因,缓冲写入器需要很长时间才能完成对文件的写入(多分钟,其中写入文件的时间少于前2秒)。代码如下:
@Override
public void handleRequest() {
Socket s = null;
BufferedReader br = null;
Writer writer = null;
PrintWriter pw = null;
try {
s = new Socket(this.getHost(), this.getPort());
pw = new PrintWriter(s.getOutputStream());
pw.println(this.getHTTPCommand());
pw.println(this.getHostCommand());
pw.print(ENDOFREQUEST);
pw.flush();
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String currentDir = System.getProperty("user.dir");
String filePath = this.getPath();
if(this.getPath().equals("/")){
filePath = "/index.html";
}
Path completePath = Paths.get(currentDir, filePath);
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(completePath.toString()), "utf-8"));
String t;
while((t = br.readLine()) != null){
writer.write(t + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
finally {
try {
if (writer != null) {
writer.close();
}
if (br != null) {
br.close();
}
if (pw != null) {
pw.close();
}
if (s != null) {
s.close();
}
}
catch (IOException e){
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
你的while循环后可能需要flush
BufferedWriter
。它不会影响代码的工作方式,但尝试使用资源也可以整理代码。