从一个流中查找指定数组

原创 2012年03月30日 12:12:52
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;
}


}

相关文章推荐

二分查找法及判断一个数组中是否有两个元素之和为指定值

请给出一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合里快速判断是否存在两个元素,其和等于某一指定值key。   方法一:  思路: 1.对数组进行归并排序或快速排序,...

merge两个有序数组 & 查找一个有序数组中指定元素

20. 合并有序数组。给定升序排列的两个数组array1和array2,要求将array2合并到array1中,并保持结果有序是升序的。假设 array1有足够的空间容纳array2.起初array1...

leetcode-java.T001_TwoSum 给定一个整数数组,找出其中两个数满足相加等于你指定的目标数字

每天坚持刷leetcode----给定一个整数数组,找出其中两个数满足相加等于你指定的目标数字。 package leetcode.T001_TwoSum; import java.util.Ar...

[面试题]设计一个算法找到数组中两个元素相加等于指定数的所有组合

[面试题]设计一个算法找到数组中两个元素相加等于指定数的所有组合 分类: 笔试面试 2012-05-10 17:23 1614人阅读 评论(0) 收藏 举报 算法面试优化存...

实现在一个数组指定位置添加元素和删除元素的功能

/*实现在一个数组指定位置添加元素和删除元素的功能。 *1、数组容量问题? *2、添加元素前后数组中元素的变化 *3、删除元素前后数组中元素的变化 *2012年12月26日 */ impo...
  • csiyou
  • csiyou
  • 2012年12月26日 23:25
  • 5931

算法题: 求一个整数数组中,通过元素加减运算得到指定结果的所有运算过程. 例如【5,4,6,7,1】= 9 ?

算法题目: 给定一个整数数组int[] a (a.length > 1),和一个整数值 m,试输出所有运算结果等于m的运算过程。可使用的运算方式只有加法和减法。数组元素最多参与一次运算。例如,给定数组...

[面试题]设计一个算法找到数组中两个元素相加等于指定数的所有组合

思路1:可以用hash表来存储数组中的元素,这样我们取得一个数后,去判断sum - val 在不在数组中,如果在数组中,则找到了一对二元组,它们的和为sum,该算法的缺点就是需要用到一个hash表,增...
  • lalor
  • lalor
  • 2012年05月10日 17:23
  • 10868

PHP 对一个给定的二维数组按照指定的键值进行排序

  • kaylio
  • kaylio
  • 2015年01月15日 09:51
  • 1176

将一个list对象数组按照指定的规则排序

import java.util.Collections; import java.util.Comparator; import java.util.List; import com.google...

在一个数组中查找两个重复出现两次的数

题目如下:现有一个数组长度为n+1,里面存放有1到n-2,顺序不定,其中有两个数字出现了两次,现在要找出那两个数字。 例子A={2, 3, 1, 4, 5, 2, 4},这个数组长度为7,存放了1到...
  • codeera
  • codeera
  • 2015年10月02日 17:24
  • 3623
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从一个流中查找指定数组
举报原因:
原因补充:

(最多只允许输入30个字)