<dependency>
<groupId>org.jruby.joni</groupId>
<artifactId>joni</artifactId>
<version>2.1.30</version>
</dependency>
code:
/** A half of a 32kb binary text block encoded in GB18030 among which I want to execute regex search */
final static byte[] Data =new byte[]{
(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x41,(byte)0x62,(byte)0x6f,(byte)0x75,(byte)0x74,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0e,(byte)0x7f,(byte)0x41,(byte)0x62,(byte)0x72,(byte)0x69,(byte)0x20,(byte)0x48,(byte)0x65,(byte)0x72,(byte)0x62,(byte)0x61,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0e,(byte)0x88,(byte)0x41,(byte)0x63,(byte)0x61,(byte)0x63,(byte)0x69,(byte)0x61,(byte)0x20,(byte)0x63,(byte)0x61,(byte)0x74,(byte)0x65,(byte)0x63,(byte)0x68,(byte)0x75,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0e,(byte)0x8f,(byte)0x41,(byte)0x63,(byte)0x61,(byte)0x6e,(byte)0x74,(byte)0x68,(byte)0x6f,(byte)0x70,(byte)0x61,(byte)0x6e,(byte)0x61,(byte)0x63,(byte)0x69,(byte)0x73,(byte)0x20,(byte)0x52,(byte)0x61,(byte)0x64,(byte)0x69,(byte)0x63,(byte)0x69,(byte)0x73,(byte)0x20,(byte)0x43,(byte)0x6f,(byte)0x72,(byte)0x74,(byte)0x65,(byte)0x78,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0e,(byte)0x98,(byte)0x41,(byte)0x63,(byte)0x61,(byte)0x6e,(byte)0x74,(byte)0x68,(byte)0x6f,(byte)0x70,(byte)0x61,(byte)0x6e,(byte)0x61,(byte)0x63,(byte)0x69,(byte)0x73,(byte)0x20,(byte)0x53,(byte)0x65,(byte)0x6e,(byte)0x74,(byte)0x69,(byte)0x63,(byte)0x6f,(byte)0x73,(byte)0x69,(byte)0x20,(byte)0x52,(byte)0x61,(byte)0x64,(byte)0x69,(byte)0x78,(byte)0x20,(byte)0x65,(byte)0x74,(byte)0x20,(byte)0x43,(byte)0x61,(byte)0x75,(byte)0x6c,(byte)0x69,(byte)0x73,(byte)0x20,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0e,(byte)0xa1,(byte)0x41,(byte)0x63,(byte)0x6f,(byte)0x6e,(byte)0x69,(byte)0x74,(byte)0x69,(byte)0x20,(byte)0x52,(byte)0x61,(byte)0x64,(byte)0x69,(byte)0x78,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0e,(byte)0xa8,(byte)0x41,(byte)0x63,(byte)0x6f,(byte)0x6e,(byte)0x69,(byte)0x74,(byte)0x69,(byte)0x20,(byte)0x54,(byte)0x75,(byte)0x62,(byte)0x65,(byte)0x72,(byte)0x20,(byte)0x4c,(byte)0x61,(byte)0x74,(byte)0x65,(byte)0x72,(byte)0x61,(byte)0x6c,(byte)0x65,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0e,(byte)0xaf,(byte)0x41,(byte)0x63,(byte)0x6f,(byte)0x6e,(byte)0x69,(byte)0x74,(byte)0x75,(byte)0x6d,(byte)0x20,(byte)0x62,(byte)0x72,(byte)0x61,(byte)0x63,(byte)0x68,(byte)0x79,(byte)0x70,(byte)0x6f,(byte)0x64,(byte)0x75,(byte)0x6d,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0e,(byte)0xbc,(byte)0x41,(byte)0x63,(byte)0x6f,(byte)0x72,(byte)0x69,(byte)0x20,(byte)0x52,(byte)0x68,(byte)0x69,(byte)0x7a,(byte)0x6f,(byte)0x6d,(byte)0x61,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0e,(byte)0xc5,(byte)0x41,(byte)0x63,(byte)0x74,(byte)0x69,(byte)0x6e,(byte)0x6f,(byte)0x6c,(byte)0x69,(byte)0x74,(byte)0x75,(byte)0x6d,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0e,(byte)0xce,(byte)0x41,(byte)0x63,(byte)0x79,(byte)0x72,(byte)0x61,(byte)0x6e,(byte)0x74,(byte)0x68,(byte)0x69,(byte)0x73,(byte)0x20,(byte)0x42,(byte)0x69,(byte)0x64,(byte)0x65,(byte)0x6e,(byte)0x74,(byte)0x61,(byte)0x74,(byte)0x61,(byte)0x65,(byte)0x20,(byte)0x52,(byte)0x61,(byte)0x64,(byte)0x69,(byte)0x78,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0e,(byte)0xd5,(byte)0x41,(byte)0x64,(byte)0x65,(byte)0x6e,(byte)0x6f,(byte)0x70,(byte)0x68,(byte)0x6f,(byte)0x72,(byte)0x61,(byte)0x65,(byte)0x20,(byte)0x52,(byte)0x61,(byte)0x64,(byte)0x69,(byte)0x78,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0e,(byte)0xde,(byte)0x41,(byte)0x65,(byte)0x73,(byte)0x63,(byte)0x75,(byte)0x6c,(byte)0x69,(byte)0x20,(byte)0x46,(byte)0x72,(byte)0x75,(byte)0x63,(byte)0x74,(byte)0x75,(byte)0x73,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0e,(byte)0xe7,(byte)0x41,(byte)0x67,(byte)0x61,(byte)0x73,(byte)0x74,(byte)0x61,(byte)0x63,(byte)0x68,(byte)0x65,(byte)0x73,(byte)0x20,(byte)0x73,(byte)0x65,(byte)0x75,(byte)0x20,(byte)0x50,(byte)0x6f,(byte)0x67,(byte)0x6f,(byte)0x73,(byte)0x74,(byte)0x65,(byte)0x6d,(byte)0x69,(byte)0x20,(byte)0x48,(byte)0x65,(byte)0x72,(byte)0x62,(byte)0x61,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0e,(byte)0xee,(byte)0x41,(byte)0x67,(byte)0x6b,(byte)0x69,(byte)0x73,(byte)0x74,(byte)0x72,(byte)0x6f,(byte)0x64,(byte)0x6f,(byte)0x6e,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0e,(byte)0xf5,(byte)0x41,(byte)0x67,(byte)0x72,(byte)0x69,(byte)0x6d,(byte)0x6f,(byte)0x6e,(byte)0x69,(byte)0x61,(byte)0x65,(byte)0x20,(byte)0x48,(byte)0x65,(byte)0x72,(byte)0x62,(byte)0x61,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0e,(byte)0xfe,(byte)0x41,(byte)0x67,(byte)0x72,(byte)0x69,(byte)0x6d,(byte)0x6f,(byte)0x6e,(byte)0x69,(byte)0x61,(byte)0x20,(byte)0x70,(byte)0x69,(byte)0x6c,(byte)0x6f,(byte)0x73,(byte)0x61,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0x07,(byte)0x41,(byte)0x69,(byte)0x64,(byte)0x69,(byte)0x63,(byte)0x68,(byte)0x61,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0x10,(byte)0x41,(byte)0x69,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x74,(byte)0x68,(byte)0x69,(byte)0x20,(byte)0x43,(byte)0x6f,(byte)0x72,(byte)0x74,(byte)0x65,(byte)0x78,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0x17,(byte)0x41,(byte)0x69,(byte)0x79,(byte)0x65,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0x1e,(byte)0x41,(byte)0x6c,(byte)0x62,(byte)0x69,(byte)0x7a,(byte)0x7a,(byte)0x69,(byte)0x61,(byte)0x65,(byte)0x20,(byte)0x43,(byte)0x6f,(byte)0x72,(byte)0x74,(byte)0x65,(byte)0x78,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0x27,(byte)0x41,(byte)0x6c,(byte)0x67,(byte)0x61,(byte)0x65,(byte)0x20,(byte)0x54,(byte)0x68,(byte)0x61,(byte)0x6c,(byte)0x6c,(byte)0x75,(byte)0x73,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0x2e,(byte)0x41,(byte)0x6c,(byte)0x69,(byte)0x73,(byte)0x6d,(byte)0x61,(byte)0x74,(byte)0x69,(byte)0x73,(byte)0x20,(byte)0x52,(byte)0x68,(byte)0x69,(byte)0x7a,(byte)0x6f,(byte)0x6d,(byte)0x61,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0x35,(byte)0x41,(byte)0x6c,(byte)0x6c,(byte)0x69,(byte)0x69,(byte)0x20,(byte)0x42,(byte)0x75,(byte)0x6c,(byte)0x62,(byte)0x75,(byte)0x73,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0x3c,(byte)0x41,(byte)0x6c,(byte)0x6c,(byte)0x69,(byte)0x69,(byte)0x20,(byte)0x46,(byte)0x69,(byte)0x73,(byte)0x74,(byte)0x75,(byte)0x6c,(byte)0x6f,(byte)0x73,(byte)0x69,(byte)0x20,(byte)0x42,(byte)0x75,(byte)0x6c,(byte)0x62,(byte)0x75,(byte)0x73,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0x43,(byte)0x41,(byte)0x6c,(byte)0x6c,(byte)0x69,(byte)0x69,(byte)0x20,(byte)0x53,(byte)0x61,(byte)0x74,(byte)0x69,(byte)0x76,(byte)0x69,(byte)0x20,(byte)0x42,(byte)0x75,(byte)0x6c,(byte)0x62,(byte)0x75,(byte)0x73,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0x4a,(byte)0x41,(byte)0x6c,(byte)0x6c,(byte)0x69,(byte)0x69,(byte)0x20,(byte)0x54,(byte)0x75,(byte)0x62,(byte)0x65,(byte)0x72,(byte)0x6f,(byte)0x73,(byte)0x69,(byte)0x20,(byte)0x53,(byte)0x65,(byte)0x6d,(byte)0x65,(byte)0x6e,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0x53,(byte)0x41,(byte)0x6c,(byte)0x6f,(byte)0x65,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0x5a,(byte)0x41,(byte)0x6c,(byte)0x70,(byte)0x69,(byte)0x6e,(byte)0x69,(byte)0x61,(byte)0x65,(byte)0x20,(byte)0x4b,(byte)0x61,(byte)0x74,(byte)0x73,(byte)0x75,(byte)0x6d,(byte)0x61,(byte)0x64,(byte)0x61,(byte)0x65,(byte)0x20,(byte)0x53,(byte)0x65,(byte)0x6d,(byte)0x65,(byte)0x6e,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0x63,(byte)0x41,(byte)0x6c,(byte)0x70,(byte)0x69,(byte)0x6e,(byte)0x69,(byte)0x61,(byte)0x65,(byte)0x20,(byte)0x4f,(byte)0x66,(byte)0x66,(byte)0x69,(byte)0x63,(byte)0x69,(byte)0x6e,(byte)0x61,(byte)0x72,(byte)0x75,(byte)0x6d,(byte)0x20,(byte)0x52,(byte)0x68,(byte)0x69,(byte)0x7a,(byte)0x6f,(byte)0x6d,(byte)0x61,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0x6c,(byte)0x41,(byte)0x6c,(byte)0x70,(byte)0x69,(byte)0x6e,(byte)0x69,(byte)0x61,(byte)0x65,(byte)0x20,(byte)0x4f,(byte)0x78,(byte)0x79,(byte)0x70,(byte)0x68,(byte)0x79,(byte)0x6c,(byte)0x6c,(byte)0x61,(byte)0x65,(byte)0x20,(byte)0x46,(byte)0x72,(byte)0x75,(byte)0x63,(byte)0x74,(byte)0x75,(byte)0x73,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0x75,(byte)0x41,(byte)0x6c,(byte)0x75,(byte)0x6d,(byte)0x65,(byte)0x6e,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0x7c,(byte)0x41,(byte)0x6d,(byte)0x6f,(byte)0x6d,(byte)0x69,(byte)0x20,(byte)0x43,(byte)0x61,(byte)0x72,(byte)0x64,(byte)0x61,(byte)0x6d,(byte)0x6f,(byte)0x6d,(byte)0x69,(byte)0x20,(byte)0x46,(byte)0x72,(byte)0x75,(byte)0x63,(byte)0x74,(byte)0x75,(byte)0x73,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0x83,(byte)0x41,(byte)0x6d,(byte)0x6f,(byte)0x6d,(byte)0x69,(byte)0x20,(byte)0x53,(byte)0x65,(byte)0x6d,(byte)0x65,(byte)0x6e,(byte)0x20,(byte)0x73,(byte)0x65,(byte)0x75,(byte)0x20,(byte)0x46,(byte)0x72,(byte)0x75,(byte)0x63,(byte)0x74,(byte)0x75,(byte)0x73,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0x8a,(byte)0x41,(byte)0x6d,(byte)0x6f,(byte)0x6d,(byte)0x69,(byte)0x20,(byte)0x54,(byte)0x73,(byte)0x61,(byte)0x6f,(byte)0x2d,(byte)0x6b,(byte)0x6f,(byte)0x20,(byte)0x46,(byte)0x72,(byte)0x75,(byte)0x63,(byte)0x74,(byte)0x75,(byte)0x73,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0x91,(byte)0x41,(byte)0x6d,(byte)0x70,(byte)0x65,(byte)0x6c,(byte)0x6f,(byte)0x70,(byte)0x73,(byte)0x69,(byte)0x73,(byte)0x20,(byte)0x52,(byte)0x61,(byte)0x64,(byte)0x69,(byte)0x78,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0x98,(byte)0x41,(byte)0x6d,(byte)0x79,(byte)0x64,(byte)0x61,(byte)0x65,(byte)0x20,(byte)0x43,(byte)0x61,(byte)0x72,(byte)0x61,(byte)0x70,(byte)0x61,(byte)0x78,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0x9f,(byte)0x41,(byte)0x6e,(byte)0x64,(byte)0x72,(byte)0x6f,(byte)0x67,(byte)0x72,(byte)0x61,(byte)0x70,(byte)0x68,(byte)0x69,(byte)0x64,(byte)0x69,(byte)0x73,(byte)0x20,(byte)0x48,(byte)0x65,(byte)0x72,(byte)0x62,(byte)0x61,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0xa8,(byte)0x41,(byte)0x6e,(byte)0x65,(byte)0x6d,(byte)0x61,(byte)0x72,(byte)0x72,(byte)0x68,(byte)0x65,(byte)0x6e,(byte)0x61,(byte)0x65,(byte)0x20,(byte)0x52,(byte)0x68,(byte)0x69,(byte)0x7a,(byte)0x6f,(byte)0x6d,(byte)0x61,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0xaf,(byte)0x41,(byte)0x6e,(byte)0x67,(byte)0x65,(byte)0x6c,(byte)0x69,(byte)0x63,(byte)0x61,(byte)0x20,(byte)0x44,(byte)0x61,(byte)0x68,(byte)0x75,(byte)0x72,(byte)0x69,(byte)0x63,(byte)0x61,(byte)0x65,(byte)0x20,(byte)0x52,(byte)0x61,(byte)0x64,(byte)0x69,(byte)0x78,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0xb6,(byte)0x41,(byte)0x6e,(byte)0x67,(byte)0x65,(byte)0x6c,(byte)0x69,(byte)0x63,(byte)0x61,(byte)0x20,(byte)0x44,(byte)0x75,(byte)0x68,(byte)0x75,(byte)0x6f,(byte)0x20,(byte)0x52,(byte)0x61,(byte)0x64,(byte)0x69,(byte)0x78,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0xbd,(byte)0x41,(byte)0x6e,(byte)0x67,(byte)0x65,(byte)0x6c,(byte)0x69,(byte)0x63,(byte)0x61,(byte)0x65,(byte)0x20,(byte)0x53,(byte)0x69,(byte)0x6e,(byte)0x65,(byte)0x6e,(byte)0x73,(byte)0x69,(byte)0x73,(byte)0x20,(byte)0x52,(byte)0x61,(byte)0x64,(byte)0x69,(byte)0x78,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0xc4,(byte)0x41,(byte)0x6e,(byte)0x74,(byte)0x65,(byte)0x6c,(byte)0x6f,(byte)0x70,(byte)0x69,(byte)0x73,(byte)0x20,(byte)0x43,(byte)0x6f,(byte)0x72,(byte)0x6e,(byte)0x75,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0xcd,(byte)0x41,(byte)0x70,(byte)0x6f,(byte)0x63,(byte)0x79,(byte)0x6e,(byte)0x75,(byte)0x6d,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0f,(byte)0xd6,(byte)0x41,(byte)0x50,(byte)0x55,(byte)0x44,(byte)0xcf,(byte)0xb5,(byte)0xcd,(byte)0xb3,(byte)0xd6,(byte)0xd7,(byte)0xc1,(byte)0xf6,(byte)0xa3,(byte)0xa8,(byte)0xb2,(byte)0xa1,(byte)0xc0,(byte)0xed,(byte)0xd1,(byte)0xa7,(byte)0xa3,(byte)0xa9,(byte)0x00,
};
public static void main(String[] args) throws Exception {
byte[] pattern = ".*happy".getBytes();
Regex Joniregex = new Regex(pattern, 0, pattern.length, Option.IGNORECASE, UTF8Encoding.INSTANCE);
Matcher Jonimatcher;
Jonimatcher = Joniregex.matcher(data);
try {
System.out.println(""+Jonimatcher.match(1177, 1199, Option.DEFAULT));
} catch (Exception e) {
e.printStackTrace();
}
}
1199-1177=22. It should be very fast.