我试图通过HttpServlet(tomcat)处理大文本文件。通过HttpServlet处理InputStream到OutputStream
由于此文件可能很大,并且进程应该非常快,因此我不想在服务器上上传文件,并且我使用方法HttpRequest.getInputStream
来即时处理输入。例如,我想输入用下面的代码变换为大写:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@SuppressWarnings("serial")
public class EchoServlet extends HttpServlet
{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
OutputStream out=null;
InputStream in=req.getInputStream();
if(in==null) throw new IOException("input is null");
try
{
resp.setContentType("text/plain");
out=resp.getOutputStream();
int c;
while((c=in.read())!=-1)
{
out.write((char)Character.toUpperCase(c));
}
}
catch(IOException err)
{
//ignore
}
finally
{
if(out!=null) out.flush();
if(out!=null) out.close();
in.close();
}
}
}
我调用我的servlet与CURL:通过servlet
curl -s -d @big.file.txt "http://localhost:8080/test/toupper"
1)处理在运行中输入,这是一种很好/常见的做法吗?
2)我的代码似乎删除回车('\ n')。为什么?
由于
“我的代码没有这样做”,是的,但是'\ n'已经在curl的输出中删除了。我刚刚从我的代码中删除了该软件包的名称。 – Pierre 2011-03-29 14:26:21
我在阅读您的答案后查看了http://commons.apache.org/fileupload/streaming.html。谢谢。 – Pierre 2011-03-29 14:59:54
我在本地尝试了您的servlet代码(尽管使用'java.net.URLConnection'代替curl),并且保留了换行符。 – BalusC 2011-03-29 15:04:19