Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.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 流式URL编码器_Java - Fatal编程技术网

Java 流式URL编码器

Java 流式URL编码器,java,Java,在我的Java应用程序中,我正在寻找的是流媒体版本的。我想使用“application/x-www-form-urlencoded”内容类型来流式处理一个大型HTTP post请求。这样的东西是否存在于库或开源项目中?还是有一个简单的方法来实现它 这是早期尝试,但不正确,因为它不处理大于一个字节的UTF代码点: // Incorrect attempt at creating a URLEncoder OutputStream private class URLEncoderOutputStre

在我的Java应用程序中,我正在寻找的是流媒体版本的。我想使用“application/x-www-form-urlencoded”内容类型来流式处理一个大型HTTP post请求。这样的东西是否存在于库或开源项目中?还是有一个简单的方法来实现它

这是早期尝试,但不正确,因为它不处理大于一个字节的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"));
    }
}

我想答案是我不应该这么做。根据报告:

内容类型“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
}