package com.docus.server.common.download;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.io.RandomAccessFile;


/**
 * <b>function:</b> 写入文件、保存文件
 */
public class SaveFileItem {
    //存储文件
    private RandomAccessFile itemFile;
    private String name;
    private Logger logger = LoggerFactory.getLogger(SaveFileItem.class);
    
    /**
     * @param name 文件路径、名称
     * @param pos 写入点位置position
     * @throws IOException
     */
    public SaveFileItem(String name, long pos) throws IOException {
    	this.name = name;
        itemFile = new RandomAccessFile(name, "rwd");
        //在指定的pos位置写入数据
        itemFile.seek(pos);
    }
    
    /**
     * <b>function:</b> 同步方法写入文件
     * @author hoojo
     * @createDate 2011-9-26 下午12:21:22
     * @param buff 缓冲数组
     * @param start 起始位置
     * @param length 长度
     * @return
     */
    public synchronized int write(byte[] buff, int start, int length) {
        int i = -1;
        try {
            itemFile.write(buff, start, length);
            i = length;
        } catch (IOException e) {
        	logger.debug(name, e);
        }
        return i;
    }
    
    public void close() throws IOException {
        if (itemFile != null) {
            itemFile.close();
        }
    }
    
    public String getFileName(){
    	return this.name;
    }
    /**
     * 设置文件大小，在old 文件大于新文件时特别有用
     * @param newLength 新的文件长度
     */
    public void setLength(long newLength){
    	try {
    		if(newLength != itemFile.length()){
    			itemFile.setLength(newLength);
    		}
		} catch (IOException e) {
			logger.debug(name, e);
		}
    }
}