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