在我的servlet中,我目前正在将XML文件设置为如下变量:
String xmlFileAsString = CharStreams.toString(new
InputStreamReader(request.getInputStream(), "UTF-8"));
现在在这行之后,我可以检查文件大小是否太大等,但这意味着整个文件已经流式传输并加载到内存中。
有没有办法让我获取输入流,但是这是流式传输文件,如果文件大小超过10MB,它应该中止?
答案 0 :(得分:1)
您可以按顺序读取流并计算读取的字符数。首先不要使用CharStreams
,因为它已经读取了整个文件。创建一个InputStreamReader
对象:
InputStreamReader reader;
reader = new InputStreamReader(request.getInputStream(), "UTF-8");
用于跟踪字数的变量:
long charCount = 0;
然后是读取文件的代码:
char[] cbuf = new char[10240]; // size of the read buffer
int charsRead = reader.read(cbuf); // read first set of chars
StringBuilder buffer = new StringBuilder(); // accumulate the data read here
while(charsRead > 0) {
buffer.append(cbuf, 0, charsRead);
if (charCount > LIMIT) { // define a LIMIT constant with your size limit
throw new XMLTooLargeException(); // treat the problem with an exception
}
}
String xmlFileAsString = buffer.toString(); //if not too large, get the string