Java 如何解析非阻塞ServletInputStream?

Java 如何解析非阻塞ServletInputStream?,java,parsing,jakarta-ee,servlets,asyncfileupload,Java,Parsing,Jakarta Ee,Servlets,Asyncfileupload,我想异步和非阻塞上传一个文件并阅读本文: 正如在我的一本java ee书中一样,建议的解决方案是这样的: public class FotoReadListener implements ReadListener { private AsyncContext ac; private ServletInputStream is; private StringBuilder input; public FotoReadListener(final AsyncCo

我想异步非阻塞上传一个文件并阅读本文:

正如在我的一本java ee书中一样,建议的解决方案是这样的:


public class FotoReadListener implements ReadListener {

    private AsyncContext ac;
    private ServletInputStream is;
    private StringBuilder input;

    public FotoReadListener(final AsyncContext ac, final ServletInputStream is) {
        this.ac = ac;
        this.is = is;
        this.input = new StringBuilder();
    }

    @Override
    public void onDataAvailable() throws IOException {
        byte[] b = new byte[1024];
        int len = 0;
        StringBuilder sb = new StringBuilder();;
        while (is.isReady() && (len = is.read(b)) != -1) {
            String data = new String(b, 0, len);
            sb.append(data);
        }
        input.append(sb);
    }

    @Override
    public void onAllDataRead() throws IOException {
        FileWriter fw  = new FileWriter(new File("C:\\temp\\onAllDataRead.txt"));
        fw.write(input.toString());
        fw.close();
        ac.getResponse().getOutputStream().print("true");
        ac.complete();
    }
}
我的问题是,
ServletInputStream
不仅仅包含文件:


-----------------------------7df230460a08
Content-Disposition: form-data; name="title"

asdfasdf asdf asdf 
-----------------------------7df230460a08
Content-Disposition: form-data; name="description"

asdf asdf asdf asdf asdf adfaf qwe asd fadklfj asdlkfh asdjfklasdhfjklasdf asdlkfh lasdjhflasdhlf hdlf halsdf asdf asdf asdf asdf df asd
-----------------------------7df230460a08
Content-Disposition: form-data; name="price"

33
-----------------------------7df230460a08
Content-Disposition: form-data; name="foto"; filename="C:\temp\DSC_0675.JPG"
Content-Type: image/jpeg


-----------------------------7df230460a08--

如何解析此输入?我必须为此编写自己的解析器吗?我真的想知道,是否还有更好的方法可以做到这一点。

输入流不是非阻塞的。你把“非阻塞”和“异步
混淆了。
ReadListener`提供了关于何时调用其方法的各种保证。它不会神奇地使
InputStream
变为非阻塞。输入流不是非阻塞的。你把“非阻塞”和“异步
混淆了。
ReadListener`提供了关于何时调用其方法的各种保证。它不会神奇地使
InputStream
变为非阻塞。