`
samyou
  • 浏览: 106097 次
  • 性别: 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;
	}

}
分享到:
评论

相关推荐

    java源码包2

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax...

    计算机二级公共基础知识

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

    JavaScript完全自学宝典 源代码

    3.6.html 向数组头添加一个项。 3.7.html 多维数组的实现方法。 第4章(\c04) 示例描述:介绍JavaScript的面向对象特性。 4.1.html 对象的创建。 4.2.html 作为关联数组的对象与数组对象实现方式...

    《C#经典编程220例》.(明日科技).【带书签】-共3部分

    实例046 在数组中添加一个数组 73 实例047 计算两个矩形矩阵的乘积 75 实例048 获取多维数组的行数与列数 78 实例049 使用快速排序法对一维数组进行排序 79 实例050 使用sort方法对数组进行快速排序 81 实例051 按...

    Excel公式与函数大辞典.宋翔(带书签高清文字版).pdf

    4.2.3 OR——判断多个条件中是否至少有一个条件成立 155 4.2.4 XOR——判断多个条件中是否有一个条件成立 156 4.2.5 IF——根据条件判断而返回不同结果 156 4.2.6 IFNA——判断公式是否出现#N/A错误 158 4.2.7 ...

    java源码包---java 源码 大量 实例

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax写...

    明日科技C#开发入门及项目实战

    实例046 在数组中添加一个数组 实例047 计算两个矩形矩阵的乘积 实例048 获取多维数组的行数与列数 实例049 使用快速排序法对一维数组进行排序 实例050 使用sort方法对数组进行快速排序 实例051 按指定条件在数组中...

    delphi 开发经验技巧宝典源码

    0209 如何把ListBox中的内容拖曳到另一个ListBox中 139 0210 把DBGrid中的数据赋给数组 139 0211 如何获取DataGrid单元格中的内容 140 0212 如何锁定文本框中的文本 141 0213 如何设置光标到文本框的末尾 ...

    C#全能速查宝典

    分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程中常用的属性、方法、类和各种技术,...

    java 面试题 总结

    对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以...

    java源码包3

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax...

    java源码包4

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    2.4 怎样表示一个算法 24 2.4.1 用自然语言表示算法 24 2.4.2 用流程图表示算法 24 2.4.3 三种基本结构和改进的流程图 28 2.4.4 用N-S 流程图表示算法 29 2.4.5 用伪代码表示算法 30 2.4.6 用计算机语言表示算法 31 ...

    超级有影响力霸气的Java面试题大全文档

    对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    2.4 怎样表示一个算法 24 2.4.1 用自然语言表示算法 24 2.4.2 用流程图表示算法 24 2.4.3 三种基本结构和改进的流程图 28 2.4.4 用N-S 流程图表示算法 29 2.4.5 用伪代码表示算法 30 2.4.6 用计算机语言表示算法 31 ...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的...

    C语言编程要点

    12.9. 有没有办法从一个或多个函数中跳出? 179 12.10. 什么是信号(signal)?用信号能做什么? 181 12.11. 为什么变量名不能以下划线开始? 182 12.12. 为什么编译程序提供了两个版本的malloc()函数? 182 12.13. 适用于...

Global site tag (gtag.js) - Google Analytics