public DefaultFileQueueImpl(final String configFile, final String storageName) {
   this.meta = new DefaultFileQueueMeta(storageName, configFile);
   this.dataFile = new DefaultFileQueueDataFile(storageName, configFile);
   this.memcacheQueue =
       new LinkedBlockingQueue<MemCachedMessage<T>>(
           DefaultFileQueueConfig.getInstance(configFile).getMemCacheSize());
   loadMeta();
   this.storageName = storageName;
   this.configFile = configFile;
   this.lastMsg = new AtomicReference<MemCachedMessage<T>>(null);
   this.dataFileOutputStream = null;
   // 启动后台批量填充内存缓存的任务
   start();
   log.info(
       "Inited SeqFileStorage: "
           + storageName
           + " readingFile: "
           + memCacheFileReading
           + " pos: "
           + memCacheLoadPos);
 }
 private void checkDataFileOutputStream() {
   FileInputStream input = null;
   try {
     // 启动的时候,dataFileOutputStream为null,不管上次启动时候写入的文件满了没,
     // 为了简单起见,还是新建一个文件
     if (dataFileOutputStream == null) {
       String newDataFileName = dataFile.createStorageFile();
       dataFileOutputStream = new ObjectOutputStream(new FileOutputStream(newDataFileName));
       meta.updateWrite(newDataFileName);
       // 更新写入的偏移量
       fileMap.put(newDataFileName, new AtomicLong(0));
       objectOutputstreamTimes = 0;
     }
     input = new FileInputStream(meta.getFileWriting());
     // 如果达到配置文件指定的大小,切换文件
     if (input.available()
         >= DefaultFileQueueConfig.getInstance(configFile).getMaxDataFileSize()) {
       dataFileOutputStream.close();
       String newDataFileName = dataFile.createStorageFile();
       dataFileOutputStream = new ObjectOutputStream(new FileOutputStream(newDataFileName));
       // 清除切换前老文件的记录
       fileMap.remove(meta.getFileWriting());
       meta.updateWrite(newDataFileName);
       // 更新写入的偏移量
       fileMap.put(newDataFileName, new AtomicLong(0));
       objectOutputstreamTimes = 0;
     }
   } catch (Exception e) {
     log.error("Create data file failed.", e);
     throw new RuntimeException("create data file failed.", e);
   } finally {
     if (input != null) {
       try {
         input.close();
       } catch (IOException e) {
         log.error("Close temp inputstream for size cal failed.", e);
       }
     }
   }
 }