MATLAB: How to specify the output type of an fread(fid…)

matlab data typesreading binary data

fread(…) lets you specify the data type of the data to be read, but appears to always return the results in a matrix of doubles.
d = fread(fid, nc, 'int16');
K>> whos d
Name Size Bytes Class Attributes
d 46080×1 368640 double
That's not a problem for small data amounts, but I need to read files with 2-4 GB files with int16 data and work with it. Reading the a 4 GB file of int16's (2 billion elements) results in a 16 GB array of doubles, which I then need to convert back to int16's, so effectively temporarily uses 18 GB of memory.
Q: is there any way to specify the output data type, or tell fread to return the data in the same data type that it read from the file?
My current work-around is to preallocate an array of int16's, and read the the file in smaller chunks, converting each chunk from doubles back to int16's.
Anybody got a better solution?

Best Answer

Try this little experiment (based on the first example in the doc)
%%

fid = fopen('nine.bin','w');
fwrite(fid,[1:9]);
fclose(fid);
%%
fid = fopen('nine.bin','r');
num = fread( fid, [1,9], 'uint8=>uint8' );
fclose(fid);
and
>> whos num
Name Size Bytes Class Attributes
num 1x9 9 uint8
Related Question