forked from nsquare-jdzone/java-examples
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDoubleByteOperationUtil.java
More file actions
112 lines (100 loc) · 4.18 KB
/
DoubleByteOperationUtil.java
File metadata and controls
112 lines (100 loc) · 4.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
package com.javadeveloperzone;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
/**
* Created by JavaDeveloperZone on 2/5/2018.
*/
public class DoubleByteOperationUtil {
public static void main(String[] args) throws IOException {
DoubleByteOperationUtil byteOperationUtil = new DoubleByteOperationUtil();
double number = 4444444.44d;
System.out.println("***************************");
byte [] doubleBytes = byteOperationUtil.doubleToByteArray(number);
double num = byteOperationUtil.convertByteArrayToDouble(doubleBytes);
System.out.println("Num is :"+num);
doubleBytes = byteOperationUtil.doubleToByteArray(number);
num = byteOperationUtil.convertByteArrayToDouble(doubleBytes);
System.out.println("Num is :"+num);
doubleBytes = byteOperationUtil.convertDoubleArrayToByteArray(new double[]{1.1,2.2,3.3});
double [] longArray = byteOperationUtil.convertByteArrayToDoubleArray(doubleBytes);
for(double l : longArray){
System.out.println(l);
}
/*for(byte b : intBytes){
System.out.println(b);
}*/
}
private byte [] convertDoubleToByteArray(double number) {
ByteBuffer byteBuffer = ByteBuffer.allocate(Double.BYTES);
byteBuffer.putDouble(number);
return byteBuffer.array();
}
private static byte[] doubletoBytes(double dblValue) {
long data = Double.doubleToRawLongBits(dblValue);
return new byte[]{
(byte) ((data >> 56) & 0xff),
(byte) ((data >> 48) & 0xff),
(byte) ((data >> 40) & 0xff),
(byte) ((data >> 32) & 0xff),
(byte) ((data >> 24) & 0xff),
(byte) ((data >> 16) & 0xff),
(byte) ((data >> 8) & 0xff),
(byte) ((data >> 0) & 0xff),
};
}
private byte[] doubleToByteArray ( final double i ) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
dos.writeDouble(i);
dos.flush();
return bos.toByteArray();
}
private double convertByteArrayToDouble(byte[] doubleBytes){
ByteBuffer byteBuffer = ByteBuffer.allocate(Double.BYTES);
byteBuffer.put(doubleBytes);
byteBuffer.flip();
return byteBuffer.getDouble();
}
private byte[] convertDoubleArrayToByteArray(double[] data) {
if (data == null) return null;
// ----------
byte[] byts = new byte[data.length * Double.BYTES];
for (int i = 0; i < data.length; i++)
System.arraycopy(convertDoubleToByteArray(data[i]), 0, byts, i * Double.BYTES, Double.BYTES);
return byts;
}
public double[] convertByteArrayToDoubleArray(byte[] data) {
if (data == null || data.length % Double.BYTES != 0) return null;
// ----------
double[] doubles = new double[data.length / Double.BYTES];
for (int i = 0; i < doubles.length; i++)
doubles[i] = ( convertByteArrayToDouble(new byte[] {
data[(i*Double.BYTES)],
data[(i*Double.BYTES)+1],
data[(i*Double.BYTES)+2],
data[(i*Double.BYTES)+3],
data[(i*Double.BYTES)+4],
data[(i*Double.BYTES)+5],
data[(i*Double.BYTES)+6],
data[(i*Double.BYTES)+7],
} ));
return doubles;
}
public double convertByteArrayToDoubleShiftOpr(byte[] data) {
if (data == null || data.length % Double.BYTES != 0) return Double.NaN;
// ----------
return ( convertByteArrayToDouble(new byte[]{
data[(Double.BYTES)],
data[(Double.BYTES) + 1],
data[(Double.BYTES) + 2],
data[(Double.BYTES) + 3],
data[(Double.BYTES) + 4],
data[(Double.BYTES) + 5],
data[(Double.BYTES) + 6],
data[(Double.BYTES) + 7],
}
));
}
}