【问题标题】:How should I handle searching through byte arrays in Java?我应该如何处理通过 Java 中的字节数组进行搜索?
【发布时间】:2010-05-02 01:16:59
【问题描述】:

初步:我正在用 Java 编写自己的 httpclient。我正在尝试解析分块编码的内容。

这是我的困境:因为我试图用 gzip 有效负载解析出分块的 http 传输编码,所以混合了 ascii 和二进制。我不能只获取 http resp 内容并将其转换为字符串并使用 StringUtils,因为二进制数据很容易包含 nil 字符。所以我需要做的是解析每个块及其块长度的一些基本操作(根据块传输/HTTP/1.1 规范)。

是否有任何有用的方法可以在二进制/部分 ascii 数据的字节数组中搜索某些模式(例如 CR LF)(而不仅仅是单个字节)?还是我必须为此编写 for 循环?

【问题讨论】:

  • 注意仅仅因为有一个CR LF 并不意味着它一定是文本。二进制数据也可以有这些字节序列。这些块编码的文件中有什么?这可能会帮助您解决问题。
  • Java 字符串可以包含 nil 字符。 "\0x".endsWith("x")true
  • 顺便说一句,您应该永远不要仅仅因为您想解析它们而将二进制流转换为字符流。 CRLF 只有 2 个 ASCII 字节。只需检查一个 13 和一个 10 是否彼此落后。

标签: java http parsing bytearray


【解决方案1】:

因此,您基本上需要ChunkedInputStreamGoogle 提供了足够的提示。 Apache HttpCore's 变体非常简洁。我建议你只使用它而不是重新发明你自己的客户端。

【讨论】:

  • 谢谢,这会有所帮助 + 我的 io 代码开始有点疯狂了。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 2010-12-27
    相关资源
    最近更新 更多