public class StoreUtils {
/**
* 绝对偏移量->文件名.
*
*
* @param offset 偏移量
* @return 文件名
*/
public static String nameFromOffset(final long offset) {
final NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumIntegerDigits(20);
nf.setMaximumFractionDigits(0);
nf.setGroupingUsed(false);
return nf.format(offset);
}
/**
* 文件名->偏移量.
*
* <li> 文件名可以是偏移量
* <li> 文件名可以是偏移量+后缀名
*
*
* @param name
* @return 文件名为空时,返回-1
*/
public static long offsetFromName(final String name){
if(StringUtils.isBlank(name)){
return -1;
}
String digital = name;
if(name.contains(ZQueueConstants.POSTFIX_SEPERATOR)){
digital = name.substring(0, name.indexOf(ZQueueConstants.POSTFIX_SEPERATOR));
}
return Long.parseLong(digital);
}
/**
* 文件名->byte[].
*
* @param name
* @return
*/
public static byte[] byteFromName(final String name){
if(StringUtils.isBlank(name)){
return null;
}
return name.getBytes();
}
/**
* 绝对偏移量->byte[].
*
* @param offset
* @return
*/
public static byte[] byteFromLong(final long offset){
String tem = nameFromOffset(offset);
return byteFromName(tem);
}
/**
* bytes->String
*
* @param bytes
* @return
*/
public static String nameFromByte(final byte[] bytes){
if(null == bytes){
return null;
}
return new String(bytes);
}
/**
* bytes->long
*
* @param bytes
* @return
*/
public static long longFromByte(final byte[] bytes){
return offsetFromName(nameFromByte(bytes));
}
/**
* 将buf中的数据,每interval取一下,共取num次
*
* @param buf 待转换的内容
* @param interval 间隔
* @param num 次数
* @return byte->long
*/
public static long[] longFromByteBuffer(final ByteBuffer buf, final int interval, final int num){
if( null == buf){
return null;
}
byte[] bytes = new byte[interval];
long[] result = new long[num];
for(int i = 0; i< num; i++){
buf.get(bytes, i*interval, (i+1)*interval-1);
result[i] = longFromByte(bytes);
}
return result;
}
}