Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JBoss输入/输出流_Java_Servlets_Jboss_Jboss 4.2.x - Fatal编程技术网

Java JBoss输入/输出流

Java JBoss输入/输出流,java,servlets,jboss,jboss-4.2.x,Java,Servlets,Jboss,Jboss 4.2.x,我与JBoss-4.2.3.GA下部署的基于Spring MVC的应用程序达成了协议,我想澄清servlet输入/输出流是如何处理大量请求/响应的。我很担心,因为我不想把整个请求/响应保存在内存中,直到调用完全完成 如何准确地检测JBoss传递给servlet的输入/输出流实现?或者我可以在某种规范中调查它的行为 感谢您提供有关它的有用信息。servlet API默认情况下不会将整个请求和响应主体保存在内存中。这实际上是您自己的处理/解析代码实现的 至于请求正文,在处理它时,不应该将整个正文保存

我与JBoss-4.2.3.GA下部署的基于Spring MVC的应用程序达成了协议,我想澄清servlet输入/输出流是如何处理大量请求/响应的。我很担心,因为我不想把整个请求/响应保存在内存中,直到调用完全完成

如何准确地检测JBoss传递给servlet的输入/输出流实现?或者我可以在某种规范中调查它的行为


感谢您提供有关它的有用信息。

servlet API默认情况下不会将整个请求和响应主体保存在内存中。这实际上是您自己的处理/解析代码实现的

至于请求正文,在处理它时,不应该将整个正文保存在
字节[]
中。是的,
byte[]
的每个字节都会消耗一个字节的Java内存。您应该尝试(重新)编写代码,这样它就不会将整个代码保存在内存中。例如,逐行处理或逐缓冲区处理,和/或将其立即流式传输到
OutputStream

例如,当主体基于字符时:

BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
PrintWriter writer = new PrintWriter(new OutputStreamWriter(someOutputStream, "UTF-8"));

for (String line; (line = reader.readLine()) != null;) {
    processIfNecessary(line);
    writer.writeln(line);
}
或者,当正文基于字节时:

BufferedInputStream input = new BufferedInputStream(request.getInputStream());
BufferedOutputStream output = new BufferedOutputStream(someOutputStream);
byte[] buffer = new byte[1024]; // 1KB buffer.

for (int length; (length = input.read(buffer)) > 0;) {
    processIfNecessary(buffer);
    output.write(buffer, 0, length);
}

至于响应体,它将保存在内存中,直到缓冲区大小。超出缓冲区大小的任何内容都将被刷新。默认缓冲区大小通常为2KB。这可在appserver级别和通过进行配置。当您将缓冲区大小设置得太高时,它会占用内存。

servlet API默认情况下不会将整个请求和响应主体保留在内存中。这实际上是您自己的处理/解析代码实现的

至于请求正文,在处理它时,不应该将整个正文保存在
字节[]
中。是的,
byte[]
的每个字节都会消耗一个字节的Java内存。您应该尝试(重新)编写代码,这样它就不会将整个代码保存在内存中。例如,逐行处理或逐缓冲区处理,和/或将其立即流式传输到
OutputStream

例如,当主体基于字符时:

BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
PrintWriter writer = new PrintWriter(new OutputStreamWriter(someOutputStream, "UTF-8"));

for (String line; (line = reader.readLine()) != null;) {
    processIfNecessary(line);
    writer.writeln(line);
}
或者,当正文基于字节时:

BufferedInputStream input = new BufferedInputStream(request.getInputStream());
BufferedOutputStream output = new BufferedOutputStream(someOutputStream);
byte[] buffer = new byte[1024]; // 1KB buffer.

for (int length; (length = input.read(buffer)) > 0;) {
    processIfNecessary(buffer);
    output.write(buffer, 0, length);
}
至于响应体,它将保存在内存中,直到缓冲区大小。超出缓冲区大小的任何内容都将被刷新。默认缓冲区大小通常为2KB。这可在appserver级别和通过进行配置。当您将缓冲区大小设置得过高时,它会占用内存