start of new file
[IRC.git] / Robust / src / Benchmarks / MapReduce / Java / Splitter.java
1 //package mapreduce;
2
3 //import java.io.FileInputStream;
4 //import java.io.IOException;
5
6 public class Splitter {
7     String filename;
8     String content;
9     int length;
10     int[] splits;
11     String[] slices;
12
13     public Splitter(String path, int splitNum, char seperator) {
14         //try{
15             //System.printString("Top of Splitter's constructor\n");
16             filename = path;
17             FileInputStream iStream = new FileInputStream(filename);
18             byte[] b = new byte[1024 * 1024];
19             length = iStream.read(b);
20             if(length < 0) {
21                 System./*out.println*/printString("Error! Can not read from input file: " + filename + "\n");
22                 System.exit(-1);
23             }
24             content = new String(b, 0, length);
25             //System.printString(content + "\n");
26             iStream.close();
27
28             if(splitNum == 1) {
29                 slices = new String[1];
30                 slices[0] = content;
31             } else {
32                 splits = new int[splitNum - 1];
33                 int index = 0;
34                 int span = length / splitNum;
35                 int temp = 0;
36                 for(int i = 0; i < splitNum - 1; ++i) {
37                     temp += span;
38                     if(temp > index) {
39                         index = temp;
40                         while((content.charAt(index) != seperator) && (index != length - 1)) {
41                             ++index;
42                         }
43                     }
44                     splits[i] = index;
45                 }
46
47                 this.slices = new String[splits.length + 1];
48                 for(int i = 0; i < this.slices.length; ++i) {
49                     this.slices[i] = null;
50                 }
51             }
52         /*} catch(IOException e) {
53             e.printStackTrace();
54             System.exit(-1);
55         }*/
56     }
57
58     public void split() {
59         if(slices.length == 1) {
60             return;
61         }
62         int start = 0;
63         int end = 0;
64         for(int i = 0; i < splits.length; ++i) {
65             end = splits[i];
66             if(end < start) {
67                 slices[i] = null;
68             } else {
69                 slices[i] = content.substring(start, end);
70             }
71             start = end + 1;
72         }
73         slices[slices.length - 1] = content.substring(start);
74     }
75
76     public String getFilename() {
77         return filename;
78     }
79
80     public String[] getSlices() {
81         return this.slices;
82     }
83 }