• Offset文件名(绝对偏移量)


    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;
        }    
        
    }
  • 相关阅读:
    2021 6 3
    2021 5月 读书笔记
    2021 6 1
    第十三周 2021.05.30
    spring security permitAll不生效
    springboot配置jpa提示Unable to resolve name [mysql] as strategy
    element el-form-item el-input宽度设置
    vue+element表格中使用render函数(if判断处理)
    elementui移除tab报Avoided redundant navigation to current location: ***
    el-dropdown-item添加@click不生效
  • 原文地址:https://www.cnblogs.com/alipayhutu/p/2508408.html
Copyright © 2020-2023  润新知