VOOVAN源碼bug修復之一TByteBuffer

源碼以下: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

相關文章
相關標籤/搜索