package jef.tools.io;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Arrays;
import jef.tools.BinaryFileCallback;
/**
* 二进制文件处理器:删除BOM字符.(其他字符也可)
* @author Administrator
* @Date 2011-7-1
*/
public class BOMRemover extends BinaryFileCallback {
int n=0;
private boolean isBomFile=false;
byte[] start;
@Override
protected void beforeProcess(FileOutputStream w, File f, File target) {
isBomFile=false;
}
private File current;
@Override
protected File getTarget(File source) {
this.current=source;
return super.getTarget(source);
}
@Override
protected int nextBufferSize() {
if(isBomFile)return super.getMaxBufferSize();
return start.length;
}
@Override
public boolean isSuccess() {
return isBomFile;
}
public BOMRemover(byte[] bom){
this.start=bom;
}
public BOMRemover() {
this(new byte[]{(byte)0xEF,(byte)0xBB,(byte)0xBF});
}
@Override
protected boolean replaceSource(File source) {
return true;
}
@Override
protected boolean breakProcess() {
return !isBomFile;
}
@Override
public byte[] process(byte[] data) {
if(isBomFile)return data;
if(Arrays.equals(start, data)){
System.out.println("ISBOM!"+current.getAbsolutePath());
isBomFile=true;
return null;
}
return data;
}
}