一般是gzip 格式压缩的,解开之后,还是看R源码吧。
src/main/saveload.c
<br />
void attribute_hidden R_SaveToFileV(SEXP obj, FILE *fp, int ascii, int version)<br />
{<br />
SaveLoadData data = {{NULL, 0, MAXELTSIZE}};</p>
<p> if (version == 1) {<br />
if (ascii) {<br />
R_WriteMagic(fp, R_MAGIC_ASCII_V1);<br />
NewAsciiSave(obj, fp, &data);<br />
} else {<br />
R_WriteMagic(fp, R_MAGIC_XDR_V1);<br />
NewXdrSave(obj, fp, &data);<br />
}<br />
}<br />
else {<br />
struct R_outpstream_st out;<br />
R_pstream_format_t type;<br />
int magic;<br />
if (ascii) {<br />
magic = R_MAGIC_ASCII_V2;<br />
type = R_pstream_ascii_format;<br />
}<br />
else {<br />
magic = R_MAGIC_XDR_V2;<br />
type = R_pstream_xdr_format;<br />
}<br />
R_WriteMagic(fp, magic);<br />
R_InitFileOutPStream(&out, fp, type, version, NULL, NULL);<br />
R_Serialize(obj, &out);<br />
}<br />
}</p>
<p>/* open & load */</p>
<p>SEXP attribute_hidden R_LoadFromFile(FILE *fp, int startup)<br />
{<br />
struct R_inpstream_st in;<br />
int magic;<br />
SaveLoadData data = {{NULL, 0, MAXELTSIZE}};<br />
SEXP r;</p>
<p> magic = R_ReadMagic(fp);<br />
switch(magic) {<br />
case R_MAGIC_XDR:<br />
return_and_free(XdrLoad(fp, startup, &data));<br />
case R_MAGIC_BINARY:<br />
return_and_free(BinaryLoad(fp, startup, &data));<br />
case R_MAGIC_ASCII:<br />
return_and_free(AsciiLoad(fp, startup, &data));<br />
case R_MAGIC_BINARY_VERSION16:<br />
return_and_free(BinaryLoadOld(fp, 16, startup, &data));<br />
case R_MAGIC_ASCII_VERSION16:<br />
return_and_free(AsciiLoadOld(fp, 16, startup, &data));<br />
case R_MAGIC_ASCII_V1:<br />
return_and_free(NewAsciiLoad(fp, &data));<br />
case R_MAGIC_BINARY_V1:<br />
return_and_free(NewBinaryLoad(fp, &data));<br />
case R_MAGIC_XDR_V1:<br />
return_and_free(NewXdrLoad(fp, &data));<br />
case R_MAGIC_ASCII_V2:<br />
R_InitFileInPStream(&in, fp, R_pstream_ascii_format, NULL, NULL);<br />
return_and_free(R_Unserialize(&in));<br />
case R_MAGIC_BINARY_V2:<br />
R_InitFileInPStream(&in, fp, R_pstream_binary_format, NULL, NULL);<br />
return_and_free(R_Unserialize(&in));<br />
case R_MAGIC_XDR_V2:<br />
R_InitFileInPStream(&in, fp, R_pstream_xdr_format, NULL, NULL);<br />
return_and_free(R_Unserialize(&in));<br />
default:<br />
R_FreeStringBuffer(&data.buffer);<br />
switch (magic) {<br />
case R_MAGIC_EMPTY:<br />
error(_("restore file may be empty -- no data loaded"));<br />
case R_MAGIC_MAYBE_TOONEW:<br />
error(_("restore file may be from a newer version of R -- no data loaded"));<br />
default:<br />
error(_("bad restore file magic number (file may be corrupted) -- no data loaded"));<br />
}<br />
return(R_NilValue);/* for -Wall */<br />
}<br />
}</p>
<p>
</p>