public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
  byte[] hdr=new byte[RES_HEADER_SIZE];
  in.readFully(hdr);
  resType=U.bytesToInt(hdr,0);
  boolean hasErr=hdr[4] != 0;
  if (hasErr) {
    err=in.readUTF();
    errCode=in.readInt();
    if (resType == RES_TYPE_ERR_STREAM_ID)     res=in.readLong();
    return;
  }
switch (resType) {
case RES_TYPE_BOOLEAN:
    res=in.readBoolean();
  break;
case RES_TYPE_LONG:
res=in.readLong();
break;
case RES_TYPE_IGFS_PATH:
{
boolean hasVal=in.readBoolean();
if (hasVal) res=IgfsUtils.readPath(in);
break;
}
case RES_TYPE_IGFS_PATH_SUMMARY:
{
boolean hasVal=in.readBoolean();
if (hasVal) {
IgfsPathSummary sum=new IgfsPathSummary();
sum.readExternal(in);
res=sum;
}
break;
}
case RES_TYPE_IGFS_FILE:
{
boolean hasVal=in.readBoolean();
if (hasVal) {
IgfsFileImpl file=new IgfsFileImpl();
file.readExternal(in);
res=file;
}
break;
}
case RES_TYPE_IGFS_STREAM_DESCRIPTOR:
{
boolean hasVal=in.readBoolean();
if (hasVal) {
IgfsInputStreamDescriptor desc=new IgfsInputStreamDescriptor();
desc.readExternal(in);
res=desc;
}
break;
}
case RES_TYPE_HANDSHAKE:
{
boolean hasVal=in.readBoolean();
if (hasVal) {
IgfsHandshakeResponse msg=new IgfsHandshakeResponse();
msg.readExternal(in);
res=msg;
}
break;
}
case RES_TYPE_STATUS:
{
boolean hasVal=in.readBoolean();
if (hasVal) {
IgfsStatus msg=new IgfsStatus();
msg.readExternal(in);
res=msg;
}
break;
}
case RES_TYPE_COL_IGFS_FILE:
{
Collection<IgfsFile> files=null;
int size=in.readInt();
if (size >= 0) {
files=new ArrayList<>(size);
for (int i=0; i < size; i++) {
IgfsFileImpl file=new IgfsFileImpl();
file.readExternal(in);
files.add(file);
}
}
res=files;
break;
}
case RES_TYPE_COL_IGFS_PATH:
{
Collection<IgfsPath> paths=null;
int size=in.readInt();
if (size >= 0) {
paths=new ArrayList<>(size);
for (int i=0; i < size; i++) paths.add(IgfsUtils.readPath(in));
}
res=paths;
break;
}
case RES_TYPE_COL_IGFS_BLOCK_LOCATION:
{
Collection<IgfsBlockLocation> locations=null;
int size=in.readInt();
if (size >= 0) {
locations=new ArrayList<>(size);
for (int i=0; i < size; i++) {
IgfsBlockLocationImpl location=new IgfsBlockLocationImpl();
location.readExternal(in);
locations.add(location);
}
}
res=locations;
break;
}
case RES_TYPE_BYTE_ARRAY:
assert false : "Response type of byte array should never be processed by marshaller.";
}
}

public void readExternal ( ObjectInput in ) throws IOException , ClassNotFoundException { byte [ ] hdr = new byte [ RES_HEADER_SIZE ] ; in . readFully ( hdr ) ; resType = U . bytesToInt ( hdr , 0 ) ; boolean hasErr = hdr [ 4 ] != 0 ; if ( hasErr ) { err = in . readUTF ( ) ; errCode = in . readInt ( ) ; if ( resType == RES_TYPE_ERR_STREAM_ID ) res = in . readLong ( ) ; return ; } switch ( resType ) { case RES_TYPE_BOOLEAN : res = in . readBoolean ( ) ; break ; case RES_TYPE_LONG : res = in . readLong ( ) ; break ; case RES_TYPE_IGFS_PATH : { boolean hasVal = in . readBoolean ( ) ; if ( hasVal ) res = IgfsUtils . readPath ( in ) ; break ; } case RES_TYPE_IGFS_PATH_SUMMARY : { boolean hasVal = in . readBoolean ( ) ; if ( hasVal ) { IgfsPathSummary sum = new IgfsPathSummary ( ) ; sum . readExternal ( in ) ; res = sum ; } break ; } case RES_TYPE_IGFS_FILE : { boolean hasVal = in . readBoolean ( ) ; if ( hasVal ) { IgfsFileImpl file = new IgfsFileImpl ( ) ; file . readExternal ( in ) ; res = file ; } break ; } case RES_TYPE_IGFS_STREAM_DESCRIPTOR : { boolean hasVal = in . readBoolean ( ) ; if ( hasVal ) { IgfsInputStreamDescriptor desc = new IgfsInputStreamDescriptor ( ) ; desc . readExternal ( in ) ; res = desc ; } break ; } case RES_TYPE_HANDSHAKE : { boolean hasVal = in . readBoolean ( ) ; if ( hasVal ) { IgfsHandshakeResponse msg = new IgfsHandshakeResponse ( ) ; msg . readExternal ( in ) ; res = msg ; } break ; } case RES_TYPE_STATUS : { boolean hasVal = in . readBoolean ( ) ; if ( hasVal ) { IgfsStatus msg = new IgfsStatus ( ) ; msg . readExternal ( in ) ; res = msg ; } break ; } case RES_TYPE_COL_IGFS_FILE : { Collection < IgfsFile > files = null ; int size = in . readInt ( ) ; if ( size >= 0 ) { files = new ArrayList < > ( size ) ; for ( int i = 0 ; i < size ; i ++ ) { IgfsFileImpl file = new IgfsFileImpl ( ) ; file . readExternal ( in ) ; files . add ( file ) ; } } res = files ; break ; } case RES_TYPE_COL_IGFS_PATH : { Collection < IgfsPath > paths = null ; int size = in . readInt ( ) ; if ( size >= 0 ) { paths = new ArrayList < > ( size ) ; for ( int i = 0 ; i < size ; i ++ ) paths . add ( IgfsUtils . readPath ( in ) ) ; } res = paths ; break ; } case RES_TYPE_COL_IGFS_BLOCK_LOCATION : { Collection < IgfsBlockLocation > locations = null ; int size = in . readInt ( ) ; if ( size >= 0 ) { locations = new ArrayList < > ( size ) ; for ( int i = 0 ; i < size ; i ++ ) { IgfsBlockLocationImpl location = new IgfsBlockLocationImpl ( ) ; location . readExternal ( in ) ; locations . add ( location ) ; } } res = locations ; break ; } case RES_TYPE_BYTE_ARRAY : assert false : "Response type of byte array should never be processed by marshaller." ; } }
reads object from data input .
