103 lines
2.0 KiB
Java
103 lines
2.0 KiB
Java
package com.tiesheng.util.ip2region;
|
|
|
|
/**
|
|
* item index class
|
|
*
|
|
* @author chenxin<chenxin619315 @ gmail.com>
|
|
*/
|
|
public class IndexBlock {
|
|
|
|
private static int LENGTH = 12;
|
|
|
|
/**
|
|
* start ip address
|
|
*/
|
|
private long startIp;
|
|
|
|
/**
|
|
* end ip address
|
|
*/
|
|
private long endIp;
|
|
|
|
/**
|
|
* data ptr and data length
|
|
*/
|
|
private int dataPtr;
|
|
|
|
/**
|
|
* data length
|
|
*/
|
|
private int dataLen;
|
|
|
|
public IndexBlock(long startIp, long endIp, int dataPtr, int dataLen) {
|
|
this.startIp = startIp;
|
|
this.endIp = endIp;
|
|
this.dataPtr = dataPtr;
|
|
this.dataLen = dataLen;
|
|
}
|
|
|
|
public static int getIndexBlockLength() {
|
|
return LENGTH;
|
|
}
|
|
|
|
public long getStartIp() {
|
|
return startIp;
|
|
}
|
|
|
|
public IndexBlock setStartIp(long startIp) {
|
|
this.startIp = startIp;
|
|
return this;
|
|
}
|
|
|
|
public long getEndIp() {
|
|
return endIp;
|
|
}
|
|
|
|
public IndexBlock setEndIp(long endIp) {
|
|
this.endIp = endIp;
|
|
return this;
|
|
}
|
|
|
|
public int getDataPtr() {
|
|
return dataPtr;
|
|
}
|
|
|
|
public IndexBlock setDataPtr(int dataPtr) {
|
|
this.dataPtr = dataPtr;
|
|
return this;
|
|
}
|
|
|
|
public int getDataLen() {
|
|
return dataLen;
|
|
}
|
|
|
|
public IndexBlock setDataLen(int dataLen) {
|
|
this.dataLen = dataLen;
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* get the bytes for storage
|
|
*
|
|
* @return byte[]
|
|
*/
|
|
public byte[] getBytes() {
|
|
/*
|
|
* +------------+-----------+-----------+
|
|
* | 4bytes | 4bytes | 4bytes |
|
|
* +------------+-----------+-----------+
|
|
* start ip end ip data ptr + len
|
|
*/
|
|
byte[] b = new byte[12];
|
|
|
|
IpUtil.writeIntLong(b, 0, startIp); //start ip
|
|
IpUtil.writeIntLong(b, 4, endIp); //end ip
|
|
|
|
//write the data ptr and the length
|
|
long mix = dataPtr | ((dataLen << 24) & 0xFF000000L);
|
|
IpUtil.writeIntLong(b, 8, mix);
|
|
|
|
return b;
|
|
}
|
|
}
|