我应该如何处理Java中字节数组的搜索?

我应该如何处理Java中字节数组的搜索?,java,http,parsing,bytearray,Java,Http,Parsing,Bytearray,预备:我正在用Java编写自己的httpclient。我试图解析出分块编码的内容 这是我的难题:因为我试图用gzip负载解析分块http传输编码,所以混合了ascii和二进制。我不能仅仅获取http响应内容并将其转换为字符串并使用StringUtils,因为二进制数据很容易包含零字符。所以我需要做的是解析出每个块及其块长度的一些基本事情(根据chunked-transfer/HTTP/1.1规范) 有没有什么有用的方法可以在二进制/部分ascii数据的字节数组中搜索某些模式(比如aCRLF)(而

预备:我正在用Java编写自己的httpclient。我试图解析出分块编码的内容

这是我的难题:因为我试图用gzip负载解析分块http传输编码,所以混合了ascii和二进制。我不能仅仅获取http响应内容并将其转换为字符串并使用StringUtils,因为二进制数据很容易包含零字符。所以我需要做的是解析出每个块及其块长度的一些基本事情(根据chunked-transfer/HTTP/1.1规范)


有没有什么有用的方法可以在二进制/部分ascii数据的字节数组中搜索某些模式(比如a
CR
LF
)(而不仅仅是单个字节)?或者我必须为此编写for循环吗?

因此,您基本上需要一个
ChunkedInputStream
。给出了足够的提示。变体相当简洁。我建议您直接使用它,而不是重新创建自己的客户端。

如果您真的真的想从头开始实现自己的HTTP客户端堆栈,请尝试谷歌搜索“+java+bytestring”。我得到的第一个点击是这个类,它似乎确实提供了您所要求的功能


但我认为@BalusC的方法更好。

注意,仅仅因为有CR LF并不意味着它一定是文本。二进制数据也可以有这些字节序列。这些区块编码文件中有什么?这可能会帮助您解决这个问题。Java字符串可以包含零字符
“\0x”.endsWith(“x”)
true
。顺便说一句,您不应该仅因为要解析二进制流而将其转换为字符流。CRLF仅为2个ASCII字节。只需检查13和10之间是否落后。谢谢,这将有助于+我的io代码开始变得有点疯狂。