Java 流式URL编码器
在我的Java应用程序中,我正在寻找的是流媒体版本的。我想使用“application/x-www-form-urlencoded”内容类型来流式处理一个大型HTTP post请求。这样的东西是否存在于库或开源项目中?还是有一个简单的方法来实现它 这是早期尝试,但不正确,因为它不处理大于一个字节的UTF代码点:Java 流式URL编码器,java,Java,在我的Java应用程序中,我正在寻找的是流媒体版本的。我想使用“application/x-www-form-urlencoded”内容类型来流式处理一个大型HTTP post请求。这样的东西是否存在于库或开源项目中?还是有一个简单的方法来实现它 这是早期尝试,但不正确,因为它不处理大于一个字节的UTF代码点: // Incorrect attempt at creating a URLEncoder OutputStream private class URLEncoderOutputStre
// Incorrect attempt at creating a URLEncoder OutputStream
private class URLEncoderOutputStream extends FilterOutputStream
{
public URLEncoderOutputStream(OutputStream out)
{
super(out);
}
@Override
public void write(int b) throws IOException
{
String s = new String(new byte[] { (byte)b });
String enc = URLEncoder.encode(s, "UTF-8");
out.write(enc.getBytes("UTF-8"));
}
}
我想答案是我不应该这么做。根据报告: 内容类型“application/x-www-form-urlencoded”在发送大量二进制数据或包含非ASCII字符的文本时效率低下。内容类型“多部分/表单数据”应用于提交包含文件、非ASCII数据和二进制数据的表单
大多数服务器在任何情况下都会拒绝超过一定长度的HTTP头。问题是OutputStreams对字符一无所知,只知道字节。你真正想要的是一个作家,例如
你想送什么?用户输入的文本非常大?是的,Apache将截断8kB的标题。在发布帖子时,您可以在正文中传递任意数量的内容。在这种情况下,内容是请求的标题还是正文的一部分?
public class URLEncodedWriter extends FilterWriter {
public void write(int c) {
out.write(URLEncoder.encode((char)c, "UTF-8"));
}
... // Same for 2 other write() methods
}