Commit | Line | Data |
---|---|---|
62deb424 BA |
1 | |
2 | #data: matrix of double or connection | |
3 | serialize = function(data, file, type, nb_per_chunk) | |
4 | { | |
5 | bin_data = file(file, "ab") | |
6 | #write data length on first call | |
7 | nbytes = ifelse(type=="double",8,4) | |
8 | first_write = FALSE | |
9 | if (file.info(file)$size == 0) | |
10 | { | |
11 | #number of items always on 8 bytes | |
12 | writeBin(0L, bin_data, size=8) #,endian="little") | |
13 | first_write = TRUE | |
14 | } | |
15 | if (is.matrix(data)) | |
16 | { | |
17 | writeBin(t(data), bin_data, size=nbytes) | |
18 | data_length = ncol(data) | |
19 | } | |
20 | else #if (is(data, "connection")) | |
21 | { | |
22 | if (first_write) | |
23 | { | |
24 | data_line = scan(data, double(), sep=",", nlines=1) | |
25 | writeBin(data_line, bin_data, size=nbytes) | |
26 | data_length = length(data_line) | |
27 | } | |
28 | repeat | |
29 | { | |
30 | data_chunk = scan(data, double(), sep=",", nlines=nb_per_chunk) | |
31 | if (length(data_chunk)==0) | |
32 | break | |
33 | writeBin(data_chunk, bin_data, size=nbytes) | |
34 | } | |
35 | } | |
36 | if (first_write) | |
37 | { | |
38 | #ecrire file_size-1 / (nbytes*nbWritten) en 0 dans bin_data ! ignored == file_size | |
39 | ignored = seek(bin_data, 0) | |
40 | writeBin(data_length, bin_data, size=8) | |
41 | } | |
42 | close(bin_data) | |
43 | } | |
44 | ||
45 | #TODO: read in binary file, always same structure | |
46 | getDataFromFile(indices, file, type) | |
47 | { | |
48 | bin_data = file(file, "rb") | |
49 | nbytes = ifelse(type=="double",8,4) | |
50 | data_length = readBin(bin_data,"double",1,nbytes) #,endian="little") | |
51 | t(sapply(indices, function(i) readBin(bin_data,"double",n=data_length,size=nbytes))) | |
52 | } |