Java 为什么人们使用BufferedReader读取post数据
人们有时使用BufferedReader读取post数据Java 为什么人们使用BufferedReader读取post数据,java,http,servlets,Java,Http,Servlets,人们有时使用BufferedReader读取post数据 BufferedReader bReader; String postData = null; try { bReader = request.getReader(); char[] buf = new char[1024]; int len; StringBuilder sBuilder = new StringBuilder();
BufferedReader bReader;
String postData = null;
try {
bReader = request.getReader();
char[] buf = new char[1024];
int len;
StringBuilder sBuilder = new StringBuilder();
while ((len = bReader.read(buf)) != -1) {
sBuilder.append(buf, 0, len);
}
postData = sBuilder.toString();
} catch (IOException e) {
bReader = null;
}
我应该在什么时候使用它来获取参数,request.getParameter()如何?有时POST数据不是名称-值对。例如,有时它是一个XML文档。我对BufferedReader不太了解,但是,您可以尝试创建一个字符串数组列表,每次发送帖子时,将消息推入数组并对索引大小进行限制,否则,根据指定服务器的硬盘空间,最终会出现内存问题。,当请求的POST数据由请求参数以外的内容组成时,使用这种方法 所以 我应该什么时候使用它来获取参数,request.getParameter()怎么样 当您希望request POST主体是一个文档时,可以使用它。但正如下文所述,这可能不够
该代码不是特别有效,并且在其他方面可能存在问题 在效率方面,代码使用
BufferedReader
并在传输到StringBuilder
之前读取一个大(-ish)字符缓冲区
- 使用
和BufferedReader
是毫无意义的。如果要执行块读取,最好(稍微)从底层char[]
读取读取器
- 将整个POST数据读入
(不限制其长度)可能会使您面临旨在触发OOME的拒绝服务攻击。(如果长请求是合法的,您将遇到相同的问题…)StringBuilder
- 是否应该将POST数据作为字符流处理,而不是尝试创建单个字符串
- 将POST数据视为字符是否正确?(请参见内容类型标题。)
- 您是否使用正确的编码方案来解码字符?(参见内容类型标题等)
- 您应该使用Content-length头作为调整大小和/或强制执行请求大小限制的提示
如果post数据占用大量内存,它会被分为两部分或更多部分发送吗
可能不会。事实上,除非你(webapp的开发人员)实施一个允许客户端发送较小数据块的方案,否则客户端可能别无选择,只能在POST数据中发送一个大文档。当然,根据文档是什么以及需要如何处理,您可能不需要在内存中组装所有文档。另一点是,你不应该依靠客户“做正确的事情”,因为它会给你带来什么。您的服务器需要在某个时刻进行自我保护。没错,这就是我想问的问题。如果post数据占用大量内存,它会被分为两部分或更多部分发送吗?如果您谈论的是ArrayList的负载量,您可以通过检查大小来限制ArrayList中字符串对象的总数,查看它是否是您确定的量,以及是否是删除第一个索引并每次继续添加。非常好,+1,但在某些情况下,BufferedReader会直接传输到目标缓冲区,因此“(稍微)更好”并不一定如此。@EJP-边际效率改进包括实例化不必要的
BufferedReader
的成本。因此,在所有情况下都是不同的。离题了,但祝贺你最近通过了200000次测试。:)我建议在阅读文本时处理文本,而不是将数据从一个缓冲区复制到另一个缓冲区并进行处理。它效率更高,代码更干净。