`
samyou
  • 浏览: 107504 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

从一个流中查找指定数组

    博客分类:
  • java
阅读更多
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字符串数组中查找指定子串

    MATLAB提供了一个名为strfind的内置函数,可以用于在字符串数组中查找指定子串。strfind函数的基本语法为: ```matlab k = strfind(str, pattern) ``` 其中,`str`是要查找的字符串数组,`pattern`是要查找的子串,`...

    Java 实例 - 在数组中查找指定元素源代码-详细教程.zip

    - 数组索引从0开始,`numbers[0]`表示第一个元素,`numbers[4]`表示最后一个元素。 2. **线性搜索** - 最简单的在数组中查找元素的方法是线性搜索,也称为顺序搜索。遍历数组的每个元素,如果找到匹配的元素,则...

    数组工具JAVA类

    `indexOf()`方法用于查找数组中指定元素的位置,而`replace()`方法则可以将数组中的某个元素替换为另一个元素。 6. **数组排序** 虽然Java 8引入了流(Stream)API来排序数组,但在更早的版本中,ArrayUtils提供`...

    C# 数组与序列化

    例如,你可能需要将一个包含大量数据的数组发送到服务器,或者将数组的状态持久化到磁盘。序列化数组时,可以序列化整个数组对象,也可以序列化数组的每个元素。对于自定义类型数组,确保类实现了`ISerializable`...

    数组和集合

    数组声明后必须初始化,使用new关键字分配内存空间,并且指定数组长度。数组的初始化可以发生在声明时,也可以在之后使用花括号{}赋值。数组的元素通过下标(索引)来访问,下标从0开始。 数组作为一种特殊的类,每...

    Java实现简单的成语消消乐(动态数组)

    在本项目中,"Java实现简单的成语消消乐(动态数组)"是一个旨在教授初学者如何使用Java编程语言创建一个类似“成语消消乐”的游戏。这个项目涉及到几个关键的编程概念,包括动态数组、数据存储、随机数生成、输入/...

    02-Java基础(数组-常见操作-遍历

    数组索引从0开始,因此对于一个包含5个元素的数组,其索引范围是0到4。 遍历数组是处理数组数据的关键操作。Java提供了多种遍历数组的方法,其中最常见的就是for循环。例如,遍历上述数组可以这样实现: ```java ...

    labview数组的使用

    2. 链接数组:多个数组可以链接在一起形成一个链表,允许数据流的灵活扩展。 五、数组与簇 数组与簇都是LabVIEW中的数据结构,但它们有本质区别。数组包含相同类型的数据,而簇包含不同类型的数据。数组元素可以...

    在Java中如何高效的判断数组中是否包含某个元素Java开

    - Java中的`Arrays`类提供了一个静态方法`indexOf`,可以用来检查一个数组是否包含指定的元素。例如,对于整型数组`int[] arr`,可以使用`Arrays.indexOf(arr, target)`来判断`target`是否存在。这种方法简单易懂,...

    MongoDB数组更新操作符.pdf

    - `$pullAll` 是一个更强大的版本,可以一次性从数组中删除多个指定的元素。它接受一个元素列表作为参数,然后从数组中移除所有这些元素。 6. **$pop 操作符**: - `$pop` 操作符用于从数组的开头或结尾移除一个...

    C语言数组-C语言实现使用动态数组来构建循环链表.zip

    在C语言中,创建循环链表通常涉及定义一个结构体来表示链表节点,包含数据和指向下一个节点的指针。由于链表的节点不是连续存储的,因此不适合使用普通数组,而应使用动态数组来模拟链表的行为。 在“C语言数组_...

    高级语言程序设计-课件-第5章-数组PPT文档.pptx

    数组是一种特殊的数据结构,由多个相同类型的数据组成,它们在内存中占据连续的存储空间,可以通过一个统一的数组名和下标来访问各个元素。一维数组是最基础的形式,它只有一个下标,通常用于线性数据的存储。 一维...

    c++二分查找

    根据给定的信息,我们可以总结出以下关于C++中非递归方式实现的二分查找算法的知识点: ...通过以上分析,我们可以看出这段代码实现了一个基本的非递归二分查找算法,并能够有效地在有序数组中查找特定元素。

    计算机二级公共基础知识

    查找是指在一个给定的数据结构中查找某个指定的元素。从线性表的第一个元素开始,依次将线性表中的元素与被查找的元素相比较,若相等则表示查找成功;若线性表中所有的元素都与被查找元素进行了比较但都不相等,则...

    c#之数组和list转换

    List&lt;T&gt; 是.NET框架中的System.Collections.Generic命名空间中的一个类,它是动态数组的实现,允许在运行时添加、删除和查找元素。List&lt;T&gt; 的优点在于它能够自动调整容量以适应元素数量的变化,而不需要像数组那样...

    MongoDB的数组查询操作符.pdf

    MongoDB 是一个流行的开源文档型数据库,它支持丰富的查询表达式,包括针对数组的查询操作。在处理包含数组的文档时,MongoDB 提供了多种操作符来帮助用户更精确地查询数据。这篇文档主要介绍了 MongoDB 中的四个...

    Thinkphp将二维数组变为标签适用的一维数组方法总结

    array_index2val函数通过遍历数组来查找指定下标的值。arr2tag函数则是处理二维数组转换的核心,它检查输入的数组是否为空,并根据是否有默认值来决定一维数组中的默认选项。通过遍历输入数组,arr2tag函数根据指定...

    php数组查找函数in_array()、array_search()、array_key_exists()使用实例

    最后,array_search() 函数则可以用来查找数组中某个值的第一个匹配的键名。这个函数的语法是 array_search($value, $array, $strict)。与 in_array() 类似,它也有一个 $strict 参数用于严格比较。如果函数找到了...

    vb实验E数组和自定义类型(精).docx

    2. **数组元素的引用**:通过索引来访问数组元素,如`arr(1)`表示访问数组的第一个元素。 3. **固定长度数组和动态数组的区别**:固定长度数组在声明时必须指定大小,且在程序执行过程中无法改变;而动态数组可以在...

Global site tag (gtag.js) - Google Analytics