IResultObject[] readData( BufferedInputStream bis, int length )
IResultObject[] readData( BufferedInputStream bis, int length, int posHint )
	IResultObject[] readData( BufferedInputStream bis, int length )			throws IOException	{		ResultObject[] rowDatas = new ResultObject[length];		byte[] intBytes = new byte[FixedBytesLengOfInt];		int rowDataLen;		byte[] rowDataBytes;		ByteArrayInputStream bais;		ObjectInputStream ois;		for ( int i = 0; i < length; i++ )		{			bis.read( intBytes );			rowDataLen = getIntOfBytes( intBytes );			rowDataBytes = new byte[rowDataLen];			bis.read( rowDataBytes );			bais = new ByteArrayInputStream( rowDataBytes );			ois = new ObjectInputStream( bais );			Object[] obs = new Object[columnCount];			for ( int j = 0; j < columnCount; j++ )			{				Class fieldType = typeArray[j];				if ( isNullObject( readIndex, j ) )					obs[j] = null;					else if ( fieldType.equals( Integer.class ) )					obs[j] = new Integer( ois.readInt( ) );				else if ( fieldType.equals( Double.class ) )					obs[j] = new Double( ois.readDouble( ) );				else if ( fieldType.equals( BigDecimal.class ) )					obs[j] = new BigDecimal( ois.readUTF( ) );				else if ( fieldType.equals( Date.class ) )					obs[j] = new Date( ois.readLong( ) );				else if ( fieldType.equals( Time.class ) )					obs[j] = new Time( ois.readLong( ) );				else if ( fieldType.equals( Timestamp.class ) )					obs[j] = new Timestamp( ois.readLong( ) );				else if ( fieldType.equals( Boolean.class ) )					obs[j] = new Boolean( ois.readBoolean( ) );				else if ( fieldType.equals( String.class )						|| fieldType.equals( DataType.getClass( DataType.ANY_TYPE ) ) )					obs[j] = ois.readUTF( );			}			rowDatas[i] = newResultObject( obs );			rowDataBytes = null;			bais = null;			ois = null;						readIndex++;		}		return rowDatas;	}