我通过nio.SocketChannel
使用HTTP,所以我得到的数据块大小为Array[Byte]
。我想把这些块放到一个解析器中,并在每个块放好之后继续解析。解析HTTP - Bytes.length!= String.length
HTTP本身似乎使用ISO8859字符集,但Payload/Body本身可以任意编码: 如果HTTP Content-Length指定X字节,则UTF8解码的Body可能具有更少的字符(1个字符可能是以2个字节以UTF8表示,等等)。
那么什么是一个很好的解析策略,以表彰一个明确指定的Content-Length和/或Transfer-Encoding:Chunked,它指定了要被尊重的块长度。
- 追加每个数据块到
mutable.ArrayBuffer[Byte]
,搜索CRLF中的字节,直到CRLF解码了从0到字符串,匹配常规表达式就像StatusRegex,HeaderRegex等? - 使用适当的字符集(例如iso8859,utf8等)解码每个数据块并添加到
StringBuilder
。有了这个解决方案,我无法兑现任何内容长度或块大小,但是..我必须关心它吗? - 任何其他解决方案...?
感谢您的提示,将需要寻找这些替代品... 目前我有严重的问题正确使用CharsetDecoder,它不时抛出MALFORMED [1]。我的尝试在那里:http://github.com/hotzen/Thesis/blob/master/src/dataflow/io/http/Parser.scala#L416 欣赏任何评论。 – hotzen 2010-06-11 10:03:41