java - 如果子字符串/单词位于有界缓冲区的边界,如何找到它

标签 java

我正在从具有 200 字节有界缓冲区的 Inputstream 中读取数据,并且我想在其中找到一个子字符串。我使用了string.indexOf(substring)

但是如果子字符串跨越边界,它不会返回正确的答案。例如从第 199 个字节开始。

有什么建议吗?

最佳答案

我能想到两种方法:

  1. 在执行indexOf()之前标准化循环缓冲区(*)。我所说的“标准化”是指复制缓冲区内的字节,以便缓冲区的开头位于索引 0 处,因此缓冲区的内容不再是循环的。这将极大地提高在缓冲区中搜索的性能,但在修改缓冲区后的第一次搜索时会产生性能损失,因为此时您必须首先进行规范化。由于您只处理 200 字节的缓冲区,因此损失可以忽略不计,如果您计划对每个缓冲区修改进行多次搜索,那么节省的成本可能会很大。
  2. 编写您自己的 indexOf( MyCircularBuffer, String ) 方法,该方法在循环缓冲区内搜索字符串的第一个字符,找到后,通过生成基于索引的方法来比较字符串的其余部分与循环缓冲区用于生成索引的逻辑相同。

* 我们正在为内存有限的计算机编写软件,因此每个缓冲区根据定义都是有界缓冲区,因此术语“有界缓冲区”并不传达任何关于您应该如何使用的有用信息使用它,或者关于它的内部结构。您所说的“有界缓冲区”实际上是“循环缓冲区”。 “圆形”一词仍然没有暗示其用途,但至少暗示了其内部结构。

关于java - 如果子字符串/单词位于有界缓冲区的边界,如何找到它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28490616/

相关文章:

java - ejb注入(inject)中的NullPointerException

java - Java applet 中的 MPI.Init 问题。

java - 如何确保计划的执行程序即使在运行时异常后也能运行

java - 像 Scala Controller 一样在 Java Controller 中呈现 JSON 响应字符串

java - 为什么我无法使用 keytool 和 RSA 生成 key ?

java - Jax-ws 与 https url 最终为 http

java - Selenium WebDriver 中的 URL Malformed 异常使用 Java 查找断开的链接

java - 什么是NullPointerException,我该如何解决?

java - Storm : get input fields in prepare()

java - 使用 Jackson 和 Json-View 排除 json 中的字段