zoukankan      html  css  js  c++  java
  • 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;
        }    
        
    }
  • 相关阅读:
    java学习 hashmap(2)
    HITcsapp大作业 程序人生
    java学习之hashmap
    java学习笔记之高精度
    java 数论之FFT/NTT及多项式运算模板
    如何下载微信公众号的视频到本地
    win10家庭版通过gpedit.msc找不到组策略的解决方案
    uni-app
    elementui el-date-picker 选择一个月范围
    CommonJS规范的require与es6规范的import的区别
  • 原文地址:https://www.cnblogs.com/alipayhutu/p/2508408.html
Copyright © 2011-2022 走看看