docs: public <M extends DMatrix>M read64() throws IOException {
          List<String> words = extractWords();
  
          if( words.size() == 3 ) {
              int numRows = Integer.parseInt(words.get(0));
              int numCols = Integer.parseInt(words.get(1));
              boolean real = words.get(2).compareToIgnoreCase("real") == 0;
  
              if (numRows < 0 || numCols < 0)
                  throw new IOException("Invalid number of rows and/or columns: " + numRows + " " + numCols);
  
              if (real)
                  return (M) readDDRM(numRows, numCols);
              else
                  return (M) readZDRM(numRows, numCols);
          } else if ( words.size() == 4 ) {
              int numRows = Integer.parseInt(words.get(0));
              int numCols = Integer.parseInt(words.get(1));
              int length = Integer.parseInt(words.get(2));
              boolean real = words.get(3).compareToIgnoreCase("real") == 0;
  
              if (numRows < 0 || numCols < 0)
                  throw new IOException("Invalid number of rows and/or columns: " + numRows + " " + numCols);
  
              if (real)
                  return (M) readDSTR(numRows, numCols, length);
              else
                  throw new IllegalArgumentException("Sparse complex not yet supported");
          } else {
              throw new IOException("Unexpected number of words on the first line. Found "+words.size());
          }
      }