-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpersist.java
More file actions
114 lines (104 loc) · 3.68 KB
/
persist.java
File metadata and controls
114 lines (104 loc) · 3.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package piecetable;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.RandomAccessFile;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Nick
*/
public class persist {
private String originalPath;
private String objectPath;
private String editPath;
private RandomAccessFile persistent_object;
private RandomAccessFile originalPiece;
private RandomAccessFile _edits;
private PieceTable pieceTable;
public long _text_len;
private int max;
public persist(String oPath,String ePath,String origPath, int max) {
this.originalPath = origPath;
this.objectPath = oPath;
this.editPath = ePath;
this.max = max;
try {
persistent_object = new RandomAccessFile(objectPath,"rw");
originalPiece = new RandomAccessFile(originalPath,"rw");
_edits = new RandomAccessFile(editPath, "rw");
originalPiece.setLength(0);
_edits.setLength(0);
persistent_object.setLength(0);
} catch (FileNotFoundException ex) {
Logger.getLogger(PieceTable.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(PieceTable.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void add_original(int length) {
pieceTable = new PieceTable(max);
pieceTable.add_original(length);
_text_len = pieceTable._text_len;
serialize();
}
public void add(int length, int index,RandomAccessFile edits) {
pieceTable = deserialize();
pieceTable.add(length,index,edits);
_text_len = pieceTable._text_len;
serialize();
}
public byte[] get_text() {
return pieceTable.get_text(_edits,originalPiece);
}
public byte[] find(long index, long length) {
return pieceTable.find(index,length,_edits,originalPiece);
}
public void remove(long index, long length) {
pieceTable = deserialize();
pieceTable.remove(index,length);
_text_len = pieceTable._text_len;
serialize();
}
public void print_pieces() {
pieceTable.print_pieces();
}
public void serialize() {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream out;
byte[] bytes = null;
try {
out = new ObjectOutputStream(bos);
out.writeObject(pieceTable);
out.flush();
bytes = bos.toByteArray();
persistent_object.setLength(0);
persistent_object.seek(0);
persistent_object.write(bytes);}
catch (IOException ex) {
Logger.getLogger(PieceTable.class.getName()).log(Level.SEVERE, null, ex);}
finally {
try {
bos.close();}
catch (IOException ex) {}
}
}
public PieceTable deserialize(){
try {
int object_length = (int) persistent_object.length();
byte[] object = new byte[object_length];
persistent_object.seek(0);
persistent_object.read(object);
ByteArrayInputStream inputStream = new ByteArrayInputStream(object);
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
pieceTable = (PieceTable) objectInputStream.readObject();
} catch (IOException | ClassNotFoundException ex) {
Logger.getLogger(PieceTable.class.getName()).log(Level.SEVERE, null, ex);
}
return pieceTable;
}
}