1
2 package org.galagosearch.tupleflow;
3
4 import java.io.DataOutputStream;
5 import java.io.File;
6 import java.io.IOException;
7
8 /***
9 *
10 * @author trevor
11 */
12 public class FileOrderedWriter<T> implements Processor<T> {
13 String filename;
14 Order<T> order;
15 DataOutputStream dataStream;
16 ArrayOutput stream;
17 Processor<T> orderedWriter;
18
19 public FileOrderedWriter(String filename, Order<T> order, boolean compressed) throws IOException {
20 this.filename = filename;
21 this.order = order;
22
23 dataStream = StreamCreator.realOutputStream(filename);
24 if (compressed) {
25 stream = new ArrayOutput(new VByteOutput(dataStream));
26 } else {
27 stream = new ArrayOutput(dataStream);
28 }
29 stream.writeString(order.getOrderedClass().getName());
30 stream.writeStrings(order.getOrderSpec());
31 this.orderedWriter = order.orderedWriter(stream);
32 }
33
34 public FileOrderedWriter(String filename, Order<T> order) throws IOException {
35 this(filename, order, true);
36 }
37
38 public FileOrderedWriter(File file, Order<T> order) throws IOException {
39 this(file.getPath(), order, true);
40 }
41
42 public Class<T> getInputClass() {
43 return order.getOrderedClass();
44 }
45
46 public void process(T object) throws IOException {
47 orderedWriter.process(object);
48 }
49
50 public void close() throws IOException {
51 orderedWriter.close();
52 dataStream.close();
53 }
54 }