Java 如何解析非阻塞ServletInputStream?
我想异步和非阻塞上传一个文件并阅读本文: 正如在我的一本java ee书中一样,建议的解决方案是这样的: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
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
变为非阻塞。