源碼以下:git
/** * 查找特定 byte 標識的位置 * byte 標識數組第一個字節的索引位置 * @param byteBuffer Bytebuffer 對象 * @param mark byte 標識數組 * @return 第一個字節的索引位置 */ public static int indexOf(ByteBuffer byteBuffer, byte[] mark){ if(byteBuffer.remaining() == 0){ return -1; } int index = -1; int position = byteBuffer.position(); byte[] tmp = new byte[mark.length]; for(int offset = 0; (offset + position <= byteBuffer.remaining() - mark.length); offset++){ byteBuffer.position(position + offset); byteBuffer.get(tmp, 0, tmp.length); if(Arrays.equals(mark, tmp)){ index = offset; break; } } byteBuffer.position(position); return index; }
測試以下:數組
private ByteBuffer b ; public void setUp() throws IOException { b = ByteBuffer.allocate(10); b.put("helyho".getBytes()); }
public void testRun() { b.flip();//b.put("helyho".getBytes()); int a = TByteBuffer.indexOf(b,"ho".getBytes()); System.out.println(a); }
查找不到自定的字節,定位問題以下:測試
問題在於Buffer.remaining()方法是動態返回當前位置與限制之間的元素數。對象
bug修改以下:索引
打個廣告:voovan地址:https://gitee.com/helyho/Voovanip