import java.io.InputStream;
public class SeekInputStream
{
/**
* 在流中查找,不适合查找全0数组,by samyou
* @param in
* @param key
* @return
*/
public static int seekBytes(InputStream in,byte[] key)
{
int lastSeekEnd = 0;
int result = -1;
byte buff[] = new byte[1000];
if(key.length > buff.length)
{
return -1;
}
try
{
in.read(buff);
do{
result = normalSeek(buff, key);
if(result >= 0)
{
break;
}
System.arraycopy(buff, buff.length-key.length, buff, 0, key.length);
lastSeekEnd+=buff.length-key.length;
}
while( in.read(buff, key.length, buff.length-key.length) >0 );
}
catch (Exception e)
{
e.printStackTrace();
try {
in.close();
} catch (Exception e2) {
}
return -1;
}
try {
in.close();
} catch (Exception e2) {
}
return result+lastSeekEnd;
}
/**
KMP查找算法
在一块buff中找
*/
private static int normalSeek(byte[] buff,byte[] key)
{
for(int i=0;i<buff.length -key.length;i++)
{
boolean seekSuccess = true;
for(int j=0;j<key.length;j++)
{
if(buff[i+j] != key[j])
{
seekSuccess =false;
break;
}
}
if(seekSuccess)
{
return i;
}
}
return -1;
}
}
分享到:
相关推荐
MATLAB提供了一个名为strfind的内置函数,可以用于在字符串数组中查找指定子串。strfind函数的基本语法为: ```matlab k = strfind(str, pattern) ``` 其中,`str`是要查找的字符串数组,`pattern`是要查找的子串,`...
- 数组索引从0开始,`numbers[0]`表示第一个元素,`numbers[4]`表示最后一个元素。 2. **线性搜索** - 最简单的在数组中查找元素的方法是线性搜索,也称为顺序搜索。遍历数组的每个元素,如果找到匹配的元素,则...
`indexOf()`方法用于查找数组中指定元素的位置,而`replace()`方法则可以将数组中的某个元素替换为另一个元素。 6. **数组排序** 虽然Java 8引入了流(Stream)API来排序数组,但在更早的版本中,ArrayUtils提供`...
例如,你可能需要将一个包含大量数据的数组发送到服务器,或者将数组的状态持久化到磁盘。序列化数组时,可以序列化整个数组对象,也可以序列化数组的每个元素。对于自定义类型数组,确保类实现了`ISerializable`...
数组声明后必须初始化,使用new关键字分配内存空间,并且指定数组长度。数组的初始化可以发生在声明时,也可以在之后使用花括号{}赋值。数组的元素通过下标(索引)来访问,下标从0开始。 数组作为一种特殊的类,每...
在本项目中,"Java实现简单的成语消消乐(动态数组)"是一个旨在教授初学者如何使用Java编程语言创建一个类似“成语消消乐”的游戏。这个项目涉及到几个关键的编程概念,包括动态数组、数据存储、随机数生成、输入/...
数组索引从0开始,因此对于一个包含5个元素的数组,其索引范围是0到4。 遍历数组是处理数组数据的关键操作。Java提供了多种遍历数组的方法,其中最常见的就是for循环。例如,遍历上述数组可以这样实现: ```java ...
2. 链接数组:多个数组可以链接在一起形成一个链表,允许数据流的灵活扩展。 五、数组与簇 数组与簇都是LabVIEW中的数据结构,但它们有本质区别。数组包含相同类型的数据,而簇包含不同类型的数据。数组元素可以...
- Java中的`Arrays`类提供了一个静态方法`indexOf`,可以用来检查一个数组是否包含指定的元素。例如,对于整型数组`int[] arr`,可以使用`Arrays.indexOf(arr, target)`来判断`target`是否存在。这种方法简单易懂,...
- `$pullAll` 是一个更强大的版本,可以一次性从数组中删除多个指定的元素。它接受一个元素列表作为参数,然后从数组中移除所有这些元素。 6. **$pop 操作符**: - `$pop` 操作符用于从数组的开头或结尾移除一个...
在C语言中,创建循环链表通常涉及定义一个结构体来表示链表节点,包含数据和指向下一个节点的指针。由于链表的节点不是连续存储的,因此不适合使用普通数组,而应使用动态数组来模拟链表的行为。 在“C语言数组_...
数组是一种特殊的数据结构,由多个相同类型的数据组成,它们在内存中占据连续的存储空间,可以通过一个统一的数组名和下标来访问各个元素。一维数组是最基础的形式,它只有一个下标,通常用于线性数据的存储。 一维...
根据给定的信息,我们可以总结出以下关于C++中非递归方式实现的二分查找算法的知识点: ...通过以上分析,我们可以看出这段代码实现了一个基本的非递归二分查找算法,并能够有效地在有序数组中查找特定元素。
查找是指在一个给定的数据结构中查找某个指定的元素。从线性表的第一个元素开始,依次将线性表中的元素与被查找的元素相比较,若相等则表示查找成功;若线性表中所有的元素都与被查找元素进行了比较但都不相等,则...
List<T> 是.NET框架中的System.Collections.Generic命名空间中的一个类,它是动态数组的实现,允许在运行时添加、删除和查找元素。List<T> 的优点在于它能够自动调整容量以适应元素数量的变化,而不需要像数组那样...
MongoDB 是一个流行的开源文档型数据库,它支持丰富的查询表达式,包括针对数组的查询操作。在处理包含数组的文档时,MongoDB 提供了多种操作符来帮助用户更精确地查询数据。这篇文档主要介绍了 MongoDB 中的四个...
array_index2val函数通过遍历数组来查找指定下标的值。arr2tag函数则是处理二维数组转换的核心,它检查输入的数组是否为空,并根据是否有默认值来决定一维数组中的默认选项。通过遍历输入数组,arr2tag函数根据指定...
最后,array_search() 函数则可以用来查找数组中某个值的第一个匹配的键名。这个函数的语法是 array_search($value, $array, $strict)。与 in_array() 类似,它也有一个 $strict 参数用于严格比较。如果函数找到了...
2. **数组元素的引用**:通过索引来访问数组元素,如`arr(1)`表示访问数组的第一个元素。 3. **固定长度数组和动态数组的区别**:固定长度数组在声明时必须指定大小,且在程序执行过程中无法改变;而动态数组可以在...