Projekt

Obecné

Profil

Stáhnout (3.49 KB) Statistiky
| Větev: | Tag: | Revize:
1
package deserialize;
2

    
3
import java.io.BufferedInputStream;
4
import java.io.BufferedWriter;
5
import java.io.ByteArrayInputStream;
6
import java.io.File;
7
import java.io.FileInputStream;
8
import java.io.FileWriter;
9
import java.io.IOException;
10
import java.io.ObjectInputStream;
11
import java.util.zip.ZipEntry;
12
import java.util.zip.ZipInputStream;
13

    
14
import org.json.simple.JSONObject;
15

    
16
public class ToJSON extends Thread {
17
	
18
	private File input;
19
	private File output;
20
	
21
	private byte buffer[];
22
	
23
	public ToJSON(File inputFilename, File outputFilename) {
24
		this.input = inputFilename;
25
		this.output = outputFilename;
26
	}
27
	
28
	@Override
29
	public void run() {
30
		super.run();
31
		
32
		buffer = readByteArray();
33
		if (buffer == null) {
34
			// TODO Chyba na??t?n? dat
35
		} else if (deserializeClassically()) {
36
			// TODO Chyba klasick? deserializace
37
		} else {
38
			// Univerzalni deserializer.
39
			convert();
40
		}
41
	}
42
	
43
	private void convert() {
44
		System.out.println("Spoustim univerzalni deserializer.");
45
		
46
		Grammar g = new Grammar(buffer);
47
		JSONObject results = g.process();
48
		
49
		save(results);
50
		
51
		System.out.println("JSON byl vytvoren.");
52
	}
53
	
54
	private boolean deserializeClassically() {
55
		try {
56
			
57
			// Try to deserialize classically.
58
			ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(buffer));
59
			@SuppressWarnings("unused")
60
			Deserializer d = (Deserializer) ois.readObject();
61
			System.out.println("Klasicka deserializace probehla v poradku.");
62
			ois.close();
63
			
64
		} catch (IOException e) {
65
			
66
			// Stream error.
67
			System.out.println("Chyba pri otevirani (uzavirani) streamu pri pokusu o klasickou deserializaci.");
68
			e.printStackTrace();
69
			
70
		} catch (Exception e) {
71
			
72
			// Others: ClassNotFoundException, ClassCastException, ...
73
			// Usually due to problems with classical deserialization.
74
			return false;
75
			
76
		}
77
		return true;
78
	}
79
	
80
	private byte[] readByteArray() {
81
		byte array[] = null;
82
		
83
		/*
84
		 * Note.
85
		 * For ZIP - the first four bytes should be one of the following combinations:
86
		 *     50 4B 03 04
87
		 *     50 4B 05 06 (empty archive)
88
		 *     50 4B 07 08 (spanned archive)
89
		 * Source: https://en.wikipedia.org/wiki/List_of_file_signatures
90
		 */
91
		ZipInputStream zipInputStream = null;
92
		ZipEntry entry = null;
93
	    try {
94
	    	zipInputStream = new ZipInputStream(new FileInputStream(input));
95
	    	entry = zipInputStream.getNextEntry();
96
			System.out.println("Velikost ZIP dat je " + entry.getSize() + "B.");
97
		} catch (Exception e) {
98
			System.out.println("Soubor neni zazipovany...");
99
		}
100
	    
101
	    try {
102
	    	if (entry != null) {
103
		    	array = new byte[(int) entry.getSize()];
104
				zipInputStream.read(array);
105
				zipInputStream.close();
106
		    } else {
107
		    	array = new byte[(int) input.length()];
108
				BufferedInputStream bis = new BufferedInputStream(new FileInputStream(input));
109
				bis.read(array);
110
				bis.close();
111
		    }
112
	    	System.out.println("Byty ze souboru byly v poradku nacteny.");
113
	    } catch (IOException e) {
114
	    	System.out.println("Pri nacitani bytu doslo k chybe.");
115
	    	return null;
116
	    }
117
	    
118
	    return array;
119
	}
120
	
121
	private void save(JSONObject obj) {
122
        try {
123
            FileWriter fw = new FileWriter(output);
124
            BufferedWriter bw = new BufferedWriter(fw);
125
            bw.write(obj.toJSONString());
126
            bw.flush();
127
            bw.close();
128
            Report.info("JSON", null, "Ulo?en? souboru prob?hlo v po??dku.");
129
        } catch (IOException e) {
130
            e.printStackTrace();
131
            Report.info("JSON", null, "P?i ukl?d?n? souboru nastala chyba.");
132
        }
133
	}
134
	
135
}
(7-7/8)