【发布时间】:2012-03-13 02:17:41
【问题描述】:
我的 servlet 的 doPost() 收到一个 HttpServletRequest,它的 ServletInputStream 向我发送了一大块用 XML 包装的 uuencoded 数据。例如,有一个元素:
<filedata encoding="base64">largeChunkEncodedHere</filedata>
我需要解码块并将其写入文件。我想从块中获取一个 InputStream,使用 MimeUtility 将其解码为流,然后使用该流写入文件---我不想将这个大块读入内存。
XML 是扁平的;即,没有太多嵌套。我的第一个想法是使用 SAX 解析器,但我不知道如何切换到流以仅读取块。
感谢您的想法。
格伦
编辑 1: 请注意 JB Nizet 在 this post 中的悲观回答。
编辑 2: 我已经在下面肯定地回答了我自己的问题,并将下面的 maximdim 的答案标记为正确,即使它没有完全回答问题,它确实将我引导到 StAX API和伍德斯托克斯。
【问题讨论】:
-
不清楚你想要完成什么。如果您正确使用 Streams,则不应将数据同时保存在内存中。另一方面,我认为在您的情况下并不重要,因为浏览器/客户端可能会在您有机会处理它之前将整个数据在 POST 中提交到您的 servlet,所以它应该与整个数据无关紧要已经在你身边。
-
@maximdim 问题是关于正确使用流。在这种情况下,使用两倍的内存会有所不同。