package com.wilutions.itol;
import java.util.Arrays;
public class ByteOrderMark {
private byte[] bytes;
public final static ByteOrderMark UTF_8 = new ByteOrderMark(0xEF, 0xBB, 0xBF);
public final static ByteOrderMark UTF_16_BE = new ByteOrderMark(0xFE, 0xFF);
public final static ByteOrderMark UTF_16_LE = new ByteOrderMark(0xFF, 0xFE);
public final static ByteOrderMark UTF_32_BE = new ByteOrderMark(0x00, 0x00, 0xFF, 0xFE);
public final static ByteOrderMark UTF_32_LE = new ByteOrderMark(0xFF, 0xFE, 0x00, 0x00);
public final static ByteOrderMark[] BOMs = new ByteOrderMark[] { UTF_8, UTF_16_BE, UTF_16_LE, UTF_32_BE, UTF_32_LE };
public ByteOrderMark(int ... ints) {
this.bytes = new byte[ints.length];
for (int i = 0; i < ints.length; i++) {
this.bytes[i] = (byte)(ints[i] & 0xFF);
}
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + Arrays.hashCode(bytes);
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (obj instanceof ByteOrderMark) {
ByteOrderMark other = (ByteOrderMark) obj;
if (!Arrays.equals(bytes, other.bytes)) return false;
}
if (obj instanceof byte[]) {
byte[] other = (byte[]) obj;
if (other.length < bytes.length) return false;
for (int i = 0; i < bytes.length; i++) {
if (bytes[i] != other[i]) return false;
}
}
return true;
}
public static ByteOrderMark fromValue(byte[] bytes) {
for (int i = 0; i < BOMs.length; i++) {
if (BOMs[i].equals(bytes)) return BOMs[i];
}
return null;
}
}