452
|
1 package alice.datasegment;
|
|
2
|
464
|
3 import java.io.ByteArrayOutputStream;
|
452
|
4 import java.io.IOException;
|
463
|
5 import java.util.zip.DataFormatException;
|
452
|
6 import java.util.zip.Inflater;
|
464
|
7 import java.util.zip.InflaterOutputStream;
|
|
8
|
452
|
9 import org.msgpack.type.Value;
|
|
10
|
|
11 import alice.codesegment.SingletonMessage;
|
|
12
|
|
13 public class ReceiveData {
|
|
14 private Object val;
|
467
|
15
|
452
|
16 // both flag have to be true or false except DataSegment is byteArray;
|
|
17 private boolean compressed = false;
|
|
18 private boolean serialized = false;
|
457
|
19 private boolean byteArray = false;
|
463
|
20
|
488
|
21 public long time;
|
|
22 public boolean setTime = false;
|
|
23 public int depth = 1;
|
|
24
|
452
|
25 public ReceiveData(Object obj, boolean cFlag, boolean sFlag){
|
|
26 val = obj;
|
|
27 compressed = cFlag;
|
|
28 serialized = sFlag;
|
|
29 }
|
463
|
30
|
457
|
31 public ReceiveData(byte[] obj, boolean cFlag, boolean sFlag){
|
|
32 val = obj;
|
|
33 byteArray = true;
|
|
34 compressed = cFlag;
|
|
35 serialized = sFlag;
|
|
36 }
|
463
|
37
|
457
|
38 public boolean isByteArray(){
|
|
39 return byteArray;
|
|
40 }
|
463
|
41
|
452
|
42 public boolean compressed(){
|
|
43 return compressed;
|
|
44 }
|
463
|
45
|
452
|
46 public boolean serialized(){
|
|
47 return serialized;
|
|
48 }
|
463
|
49
|
452
|
50 public Object getObj(){
|
|
51 return val;
|
|
52 }
|
463
|
53
|
452
|
54 public String asString(){
|
|
55 if (serialized){
|
|
56 return asClass(String.class);
|
|
57 } else {
|
|
58 return (String) val;
|
|
59 }
|
|
60 }
|
463
|
61
|
452
|
62 public int asInteger(){
|
|
63 if (serialized){
|
|
64 return asClass(Integer.class);
|
|
65 } else {
|
|
66 return (Integer) val;
|
|
67 }
|
|
68 }
|
463
|
69
|
452
|
70 public Float asFloat(){
|
|
71 if (serialized){
|
|
72 return asClass(Float.class);
|
|
73 } else {
|
|
74 return (Float) val;
|
|
75 }
|
|
76 }
|
463
|
77
|
452
|
78 public Value getVal(){
|
|
79 if (serialized){
|
|
80 return asClass(Value.class);
|
|
81 } else {
|
|
82 try {
|
|
83 return SingletonMessage.getInstance().unconvert(val);
|
|
84 } catch (IOException e) {
|
|
85 e.printStackTrace();
|
|
86 }
|
|
87 return null;
|
|
88 }
|
|
89 }
|
463
|
90
|
452
|
91 @SuppressWarnings("unchecked")
|
|
92 public <T> T asClass(Class<T> clazz) {
|
|
93 try {
|
460
|
94 if (!byteArray) {
|
452
|
95 return (T) val;
|
460
|
96 }
|
452
|
97 byte[] b = null;
|
|
98 if (compressed) {
|
460
|
99 b = unzip((byte[]) val);
|
452
|
100 } else {
|
|
101 b = (byte[]) val;
|
|
102 }
|
463
|
103
|
460
|
104 if (serialized) {
|
|
105 return SingletonMessage.getInstance().read(b, clazz);
|
|
106 } else {
|
|
107 return (T) b;
|
|
108 }
|
463
|
109 } catch (IOException | DataFormatException e) {
|
452
|
110 e.printStackTrace();
|
460
|
111 return null;
|
452
|
112 }
|
|
113 }
|
463
|
114
|
|
115 public byte[] unzip(byte[] input) throws IOException, DataFormatException{
|
464
|
116 Inflater inflater = new Inflater();
|
|
117 ByteArrayOutputStream os = new ByteArrayOutputStream();
|
|
118 InflaterOutputStream ios = new InflaterOutputStream(os, inflater);
|
|
119 ios.write(input);
|
467
|
120 ios.finish();
|
464
|
121 return os.toByteArray();
|
463
|
122 }
|
|
123
|
452
|
124 }
|