package ucar.nc2.iosp.fysat.util; import java.io.UnsupportedEncodingException; import java.nio.Buffer; import java.nio.ByteOrder; import java.nio.ByteBuffer; public class EndianByteBuffer { public static short LITTLE_ENDIAN = 0; // non_zero for little endian , suit for intel model public static short BIG_ENDIAN = -1;// non_zero for big endian , suit for motoroal model private short awxEndian = EndianByteBuffer.LITTLE_ENDIAN; private ByteBuffer byteBuffer; public EndianByteBuffer(byte[] byteArray,short endian) { if(endian == 0){ this.awxEndian = EndianByteBuffer.LITTLE_ENDIAN; } else { this.awxEndian = EndianByteBuffer.BIG_ENDIAN; } this.byteBuffer = ByteBuffer.allocate(byteArray.length); this.byteBuffer.put(byteArray); this.byteBuffer.position(0); } public EndianByteBuffer(byte[] byteArray){ this(byteArray, EndianByteBuffer.LITTLE_ENDIAN); } public void setEndian(short endian){ if(endian == 0){ this.awxEndian = EndianByteBuffer.LITTLE_ENDIAN; } else { this.awxEndian = EndianByteBuffer.BIG_ENDIAN; } } public int getInt(){ int v; if(this.awxEndian == EndianByteBuffer.LITTLE_ENDIAN){ v= byteBuffer.order( ByteOrder.LITTLE_ENDIAN ).getInt(); } else{ v= byteBuffer.getInt(); } return v; } public short getShort(){ short v; if(this.awxEndian == EndianByteBuffer.LITTLE_ENDIAN){ v= byteBuffer.order( ByteOrder.LITTLE_ENDIAN ).getShort(); } else{ v= byteBuffer.getShort(); } return v; } public long getLong(){ long v; if(this.awxEndian == EndianByteBuffer.LITTLE_ENDIAN){ v= byteBuffer.order( ByteOrder.LITTLE_ENDIAN ).getLong(); } else{ v= byteBuffer.getLong(); } return v; } public float getFloat(){ float v; if(this.awxEndian == EndianByteBuffer.LITTLE_ENDIAN){ v= byteBuffer.order( ByteOrder.LITTLE_ENDIAN ).getFloat(); } else{ v= byteBuffer.getFloat(); } return v; } public double getDouble(){ double v; if(this.awxEndian == EndianByteBuffer.LITTLE_ENDIAN){ v= byteBuffer.order( ByteOrder.LITTLE_ENDIAN ).getDouble(); } else{ v= byteBuffer.getDouble(); } return v; } public String getString(int byteCount){ byte[] buf = new byte[byteCount]; byteBuffer.get(buf); String v = null ; try { v = new String(buf, "US-ASCII"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return v; } public short[] getShortArray(){ int count = (byteBuffer.array().length - byteBuffer.position())/2; short[] va = new short[count] ; if(this.awxEndian == EndianByteBuffer.LITTLE_ENDIAN){ for(int i=0; i<count; i++){ va[i] = byteBuffer.order( ByteOrder.LITTLE_ENDIAN ).getShort(); } } else{ for(int i=0; i<count; i++){ va[i] = byteBuffer.getShort(); } } return va; } public long[] getLongArray(){ int count = (byteBuffer.array().length - byteBuffer.position())/8; long[] va = new long[count] ; if(this.awxEndian == EndianByteBuffer.LITTLE_ENDIAN){ for(int i=0; i<count; i++){ va[i] = byteBuffer.order( ByteOrder.LITTLE_ENDIAN ).getLong(); } } else{ for(int i=0; i<count; i++){ va[i] = byteBuffer.getLong(); } } return va; } public int[] getIntArray(){ int count = (byteBuffer.array().length - byteBuffer.position())/4; int[] va = new int[count] ; if(this.awxEndian == EndianByteBuffer.LITTLE_ENDIAN){ for(int i=0; i<count; i++){ va[i] = byteBuffer.order( ByteOrder.LITTLE_ENDIAN ).getInt(); } } else{ for(int i=0; i<count; i++){ va[i] = byteBuffer.getInt(); } } return va; } public final void position(int newPosition) { this.byteBuffer.position(newPosition); } }