在我的Java应用程序中,我正在寻找URLEncoder.encode(String s, String enc)的流式版本。我想使用“application / x-www-form-urlencoded”内容类型流式传输大型HTTP帖子请求。在图书馆或开源项目中是否存在这样的事情?或者有一种简单的方法来实现它吗?
这是一次早期尝试,但是不正确,因为它不处理大于一个字节的UTF代码点:
// 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"));
}
}
答案 0 :(得分:3)
问题是OutputStreams对字符一无所知,只知道字节。你真正想要的是一个 Writer ,例如
public class URLEncodedWriter extends FilterWriter {
public void write(int c) {
out.write(URLEncoder.encode((char)c, "UTF-8"));
}
... // Same for 2 other write() methods
}
答案 1 :(得分:1)
我认为答案是我不应该这样做。根据{{3}}:
内容类型“application / x-www-form-urlencoded”对于发送大量二进制数据或包含非ASCII字符的文本效率不高。内容类型“multipart / form-data”应该用于提交包含文件,非ASCII数据和二进制数据的表单。
在任何情况下,大多数服务器都会拒绝超过一定长度的HTTP标头。