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;
|
464
|
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
|
452
|
21 public ReceiveData(Object obj, boolean cFlag, boolean sFlag){
|
|
22 val = obj;
|
|
23 compressed = cFlag;
|
|
24 serialized = sFlag;
|
|
25 }
|
463
|
26
|
457
|
27 public ReceiveData(byte[] obj, boolean cFlag, boolean sFlag){
|
|
28 val = obj;
|
|
29 byteArray = true;
|
|
30 compressed = cFlag;
|
|
31 serialized = sFlag;
|
|
32 }
|
463
|
33
|
457
|
34 public boolean isByteArray(){
|
|
35 return byteArray;
|
|
36 }
|
463
|
37
|
452
|
38 public boolean compressed(){
|
|
39 return compressed;
|
|
40 }
|
463
|
41
|
452
|
42 public boolean serialized(){
|
|
43 return serialized;
|
|
44 }
|
463
|
45
|
452
|
46 public Object getObj(){
|
|
47 return val;
|
|
48 }
|
463
|
49
|
452
|
50 public String asString(){
|
|
51 if (serialized){
|
|
52 return asClass(String.class);
|
|
53 } else {
|
|
54 return (String) val;
|
|
55 }
|
|
56 }
|
463
|
57
|
452
|
58 public int asInteger(){
|
|
59 if (serialized){
|
|
60 return asClass(Integer.class);
|
|
61 } else {
|
|
62 return (Integer) val;
|
|
63 }
|
|
64 }
|
463
|
65
|
452
|
66 public Float asFloat(){
|
|
67 if (serialized){
|
|
68 return asClass(Float.class);
|
|
69 } else {
|
|
70 return (Float) val;
|
|
71 }
|
|
72 }
|
463
|
73
|
452
|
74 public Value getVal(){
|
|
75 if (serialized){
|
|
76 return asClass(Value.class);
|
|
77 } else {
|
|
78 try {
|
|
79 return SingletonMessage.getInstance().unconvert(val);
|
|
80 } catch (IOException e) {
|
|
81 e.printStackTrace();
|
|
82 }
|
|
83 return null;
|
|
84 }
|
|
85 }
|
463
|
86
|
452
|
87 @SuppressWarnings("unchecked")
|
|
88 public <T> T asClass(Class<T> clazz) {
|
|
89 try {
|
460
|
90 if (!byteArray) {
|
452
|
91 return (T) val;
|
460
|
92 }
|
452
|
93 byte[] b = null;
|
|
94 if (compressed) {
|
460
|
95 b = unzip((byte[]) val);
|
452
|
96 } else {
|
|
97 b = (byte[]) val;
|
|
98 }
|
463
|
99
|
460
|
100 if (serialized) {
|
|
101 return SingletonMessage.getInstance().read(b, clazz);
|
|
102 } else {
|
|
103 return (T) b;
|
|
104 }
|
463
|
105 } catch (IOException | DataFormatException e) {
|
452
|
106 e.printStackTrace();
|
460
|
107 return null;
|
452
|
108 }
|
|
109 }
|
463
|
110
|
|
111 public byte[] unzip(byte[] input) throws IOException, DataFormatException{
|
464
|
112 Inflater inflater = new Inflater();
|
|
113 ByteArrayOutputStream os = new ByteArrayOutputStream();
|
|
114 InflaterOutputStream ios = new InflaterOutputStream(os, inflater);
|
|
115 ios.write(input);
|
|
116 ios.finish();
|
|
117 return os.toByteArray();
|
463
|
118 }
|
|
119
|
452
|
120 }
|