http://java.sun.com/developer/technicalArticles/Programming/serialization/
points out serialization can be a slow process. So, here I present two methods to convert a date to and from a byte array. I welcome comments on these, I’m sure they can be speeded up and generally be improved.
Converting to a byte array
Longs are stored as 8 bytes, so converting them is a case of masking off the bottom byte storing it in the array and then shifting the orignal number right 8 bits.private byte[] longToByteArray(long value)
{
byte[] buffer = new byte[8]; //longs are 8 bytes I believe
for (int i = 7; i >= 0; i--) { //fill from the right
buffer[i]= (byte)(value & 0x00000000000000ff); //get the bottom byte
//System.out.print(""+Integer.toHexString((int)buffer[i])+",");
value=value >>> 8; //Shift the value right 8 bits
}
return buffer;
}
Converting back from a byte array to a long
Converting back the other way we use a multiplier to convert each byte to it’s correct value. This multiplier is shifted left 8 bits each time round the loop.
private long byteArrayToLong(byte[] buffer){
long value=0;
long multiplier=1;
for (int i = 7; i >= 0; i--) { //get from the right
//System.out.println(Long.toHexString(multiplier)+"\t"+Integer.toHexString((int)buffer[i]));
value=value+(buffer[i] & 0xff)*multiplier; // add the value * the hex multiplier
multiplier=multiplier <<8;
}
return value;
}
A simple test case
The following code shows these examples in use, converting a Date to a byte array and back again maintaining it’s value:long tempnow = System.currentTimeMillis();
Date tempDate= new Date(tempnow);
System.out.println("now "+tempnow);
System.out.println("Native Date "+tempDate);
//Convert to Byte Array and print
byte btempnow[]=longToByteArray(tempnow);
System.out.println();
System.out.print("Byte Array ");
displayByteArrayAsHex(btempnow);
//and Convert it back again
long converted =byteArrayToLong(btempnow);
tempDate=new Date(converted);
System.out.println("converted now "+converted);
System.out.println("converted Date "+tempDate);
this is very good information
ReplyDeletehttps://hubdigitalmarketing.blogspot.com/p/singapore.html