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