在一段程序中生成了BufferedReader
Socket socket = serverSocket.accept();
System.out.println("new request coming.");
DataInputStream reader = new DataInputStream((socket.getInputStream()));
BufferedReader bufReader = new BufferedReader(new InputStreamReader(reader));
...
后面的代码中把DataInputStream传递给了新生成的线程
HttpPostProcesser postProcesser = new HttpPostProcesser(reader, out, virtualPath);
Thread thread = new Thread(postProcesser);
thread.run();
在线程HttpPostProcesser中又一次生成BufferedReader,这时就会丢失部分数据。
BufferedReader bufReader = new BufferedReader(new InputStreamReader(reader));
分析可能是以 DataInputStream对象生成 BufferedReader时,新生成的 BufferedReader会忽略DataInputStream中未读取的数据,从DataInputStream结尾处作为新BufferedReader的开始读取点。
在使用过程中,要把reader和bufReader一起传递给后续的函数。